我正试图谦虚地将Jason Coon的“FastLED + ESP8266 Web服务器”移植到ESPAsyncWebServer https://github.com/jasoncoon/esp8266-fastled-webserver,还有一些额外的好东西...
我的项目位于https://github.com/kelexel/esp8266-fastled-async-webserver-2.0/
我对这个项目的主要工作是将所有内容包装成漂亮的类,并尝试提供某种模块化。
我对C ++完全陌生,所以请放纵......
我想要实现的是获得我,新手,只能解释为对象的集合,每个对象具有String 名称和方法模式。所述模式应该是ESPLedDriver.cpp类
的方法问题在于,在ESPLedDriver.h和ESPLedDriver.cpp中,我尝试创建一个引用ESPLedDriver ::
的Struct。我制作了一段代码来说明问题:
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)
答案 0 :(得分:2)
如果所有对象都是字符串和模式,则可以将它们建模为抽象基类:
class String_Pattern
{
public:
virtual void pattern_method(ESPLedDriver& driver_to_use) = 0;
private:
std::string text;
};
请注意,此设计需要将驱动程序传递给字符串模式对象。想一想这给对象一个驱动程序可以使用。