如何在Struct中引用类方法
C++, How to reference Class methods in a Struct?
我正试图谦虚地移植"FastLED + ESP8266 Web服务器"由Jason Coon: https://github.com/jasoncoon/esp8266-fastled-webserver到ESPAsyncWebServer,有一些额外的好东西…
我的项目位于这里https://github.com/kelexel/esp8266-fastled-async-webserver-2.0/
我在这个项目中的主要工作是把所有东西都包装成漂亮的类,并尝试提供某种模块化。
编辑:正如许多人在下面的评论中指出的那样,我试图实现的目标显然是错误的。所有我正在寻找的是想法,代码样本,文档,参考资料,应该做什么,所以我可以学习和改进…
我对c++完全陌生,所以请宽容一点。
我试图完成的是获得我,新手,只能解释为对象的集合,每个对象都有一个字符串名称和方法模式。所述模式应该是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)
如果所有对象都是字符串和模式,您可以将它们建模为抽象基类:
class String_Pattern
{
public:
virtual void pattern_method(ESPLedDriver& driver_to_use) = 0;
private:
std::string text;
};
注意,这种设计需要将驱动程序传递给字符串模式对象。想象一下,这给了对象一个要使用的驱动程序。
相关文章:
- C++当您取消引用指向类对象的指针,然后将其作为引用返回时,是否可以对此引用调用方法
- 对超类方法的未定义引用
- C++类方法包含对静态变量的未定义引用
- 从基类方法返回对派生类的引用
- 传递指针或引用派生类,以便调用基类方法
- r-使用Rcpp模块公开带有引用参数的c++类方法时出错
- Swig - 绑定返回对控制器类指针的引用的方法
- 引用类的成员函数的正确方法是什么?
- 类方法中的新指针必须强制转换为引用
- 是否可以通过引用将方法从类传递到全局函数或在类之间传递?
- 为什么我不能在方法中按名称引用类的实例?
- 基类方法被调用而不是派生的,即使通过引用传递也是如此
- C++如何将类方法传递给要求引用可调用的函数
- 对第三方库上的类::方法的未定义引用
- 对类方法的未定义引用
- 为什么有些类方法返回"*this"(self的对象引用)?
- 通过引用另一个类方法传递向量成员变量
- 对类方法的未定义引用
- r-Rcpp可以公开一个引用同一类的C++类方法
- 如何在Struct中引用类方法