0

Jason Coon による「FastLED + ESP8266 Web サーバー」を謙虚に移植しようとしています: https://github.com/jasoncoon/esp8266-fastled-webserverを ESPAsyncWebServer に、いくつかの追加機能を追加して...

私のプロジェクトはここにありますhttps://github.com/kelexel/esp8266-fastled-async-webserver-2.0/

このプロジェクトでの私の主な仕事は、すべてを素敵なクラスにラップし、ある種のモジュール性を提供しようとすることです。

編集:以下のコメントで多くの人が指摘しているように、私が達成しようとしていることは明らかに間違っています。私が探しているのは、何をすべきかについてのアイデア、コードサンプル、ドキュメント、リファレンスだけなので、学び、改善することができます...

私は C++ に全く慣れていないので、甘やかしてください..

私が達成しようとしているのは、初心者の私がオブジェクトのコレクションとしてしか説明できないものを取得することです。各オブジェクトは Stringとメソッドpatternを持っています。上記のパターンは、 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 )

4

1 に答える 1

2

すべてのオブジェクトが文字列とパターンの場合、それらを抽象基本クラスとしてモデル化できます。

class String_Pattern
{
  public:  
    virtual void pattern_method(ESPLedDriver& driver_to_use) = 0;
  private:
    std::string  text;
};

この設計では、ドライバーを文字列パターン オブジェクトに渡す必要があることに注意してください。これにより、オブジェクトに使用するドライバーが与えられると考えてください。

于 2016-11-16T16:45:23.190 に答える