C++,如何在结构中引用类方法?

标签 c++ arduino esp8266 arduino-esp8266

<分区>

我正试图谦虚地移植 Jason Coon 的“FastLED + ESP8266 Web 服务器”:https://github.com/jasoncoon/esp8266-fastled-webserver到 ESPAsyncWebServer,还有一些额外的东西......

我的项目位于此处https://github.com/kelexel/esp8266-fastled-async-webserver-2.0/

我在这个项目上的主要工作是将所有内容包装到漂亮的类中,并尝试提供某种模块化。

编辑:正如许多人在下面的评论中指出的那样,我试图完成的事情显然被错误地说明了。我所寻找的只是关于应该做什么的想法、代码示例、文档、引用资料,这样我就可以学习和改进...

我是 C++ 的新手,所以请放纵一下..

我想要完成的是获得我这个新手只能解释为对象集合的东西,每个对象都有一个字符串名称 和方法模式。所述pattern应该是ESPLedDriver.cpp类的一个方法

问题在于,在 ESPLedDriver.h 和 ESPLedDriver.cpp 中,我尝试创建一个引用 ESPLedDriver::的结构

我做了一段代码来说明这个问题:

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++,如何在结构中引用类方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40636959/

相关文章:

http - ESP8266 WiFiClient 简单 HTTP GET

c++ - 在 Qt Quick 2 中使用 QVTKOpenGLWidget

c++ - C动态成员结构

python - 从 Python 3 控制 Arduino 继电器

python - 通过 XBee 模块将字符串从 Raspberry Pi 发送到 Arduino

mqtt - ESP8266 未连接到 MQTT 代理 hivemq

c - 是否可以让 ESP8266 在 WPA2 企业网络上运行?

c++ - 获取最接近键的 std::container::iterator

c++ - MSVC 中的 Constexpr 友元函数

C switch case 值不能在 switch 内修改(不是常量)