Я пытаюсь кротко порт «FastLED + ESP8266 Веб-сервер» Джейсон куна: https://github.com/jasoncoon/esp8266-fastled-webserver к ESPAsyncWebServer, с несколькими дополнительными вкусностями ...C++, Как ссылаться на методы класса в Struct?
Мой проект находится здесь https://github.com/kelexel/esp8266-fastled-async-webserver-2.0/
Моя основная работа по этому вопросу проект состоит в том, чтобы обернуть все в классные классы и попытаться позволить себе некоторую модульность.
EDIT: Как указано в комментариях ниже, то, что я пытаюсь выполнить, явно неверно проиллюстрировано. Все, что я ищу идеи, примеры кода, документы, ссылки на то, что должно быть сделано, так что я могу учиться и совершенствоваться ...
Я совершенно новой для C++, поэтому, пожалуйста, будьте снисходительны ..
То, что я пытаюсь выполнить, - это получить то, что я, неофит, может объяснить только как совокупность объектов, каждый объект имеет строку имя и метод pattern. Указанный шаблон должен быть метод ESPLedDriver.cpp класса
Проблема заключается в том, что в ESPLedDriver.h и ESPLedDriver.cpp, я пытаюсь создать структуру, которая ссылается на ESPLedDriver ::
I сделал фрагмент кода, чтобы проиллюстрировать этот вопрос:
ESPLedDriver.cpp
void ESPLedDriver::colorwaves()
{
// ...
}
void ESPLedDriver::palettetest()
{
// ...
}
void ESPLedDriver::setPatterns()
{
// const uint8_t patternCount;
_patterns = {
// ERROR: src/ESPLedDriver.cpp:225:3: error: cannot convert 'ESPLedDriver::colorwaves' from type 'void (ESPLedDriver::)()' to type 'ESPLedDriver::Pattern {aka void (*)()}'
{ colorwaves, "Color Waves" },
// ERROR: src/ESPLedDriver.cpp:225:3: error: cannot convert 'ESPLedDriver::palettetest' from type 'void (ESPLedDriver::)()' to type 'ESPLedDriver::Pattern {aka void (*)()}'
{ this->palettetest, "Palette Test" },
};
}
ESPLedDriver.h
#include "FastLED.h"
class ESPLedDriver
{
public:
ESPLedDriver();
// ...
private:
void setPatterns();
typedef void (*Pattern)();
typedef Pattern PatternList[];
typedef struct {
Pattern pattern;
String name;
} PatternAndName;
typedef PatternAndName PatternAndNameList[];
/* Patterns */
void colorwaves();
void palettetest();
PatternAndNameList _patterns;
uint8_t _patternCount;
}
(Или, если вы предпочитаете, как суть: https://gist.github.com/kelexel/ab5687cf83e376c709e49fbfbcfc100b)
C, C#, C++ - это не то же самое. Вы должны решить один из них, прежде чем начинать писать код ... – user2393256
Зачем использовать указатели функций вместо наследования абстрактного интерфейса? –
Указатель на элемент не является «регулярным» указателем. – molbdnilo