1

私はarduinoプロジェクトに取り組んでいます。

arduinoが何であるかを知らない人のために:

arduino は、C++ でプログラムできるマイクロコントローラーを備えた小さな電子ボードです。

arduinoはちょっとしたマイコンなので、シングルコア16MHzマルチプロセッシングは大変です。

クラスを作成しました。コンストラクターで、ピンを pwm 出力として定義し、最小フェード、最大フェード、フェード時間などを設定します。

フェードを開始し、フェードを停止する方法があり、設定値、速度を変更します...

マルチフェードのために、更新メソッドを作成しました。

したがって、light1.update() を呼び出すと、pwm 出力を変更する必要があるかどうかがチェックされます。

問題は次のとおりです。

私はより多くのライトを持っているので、それは次のようになります:

light1.update();
light2.update();
light3.update();
and so on

フェード クラスのすべてのオブジェクトで update() を呼び出す 1 行だけを記述する方法はありますか?

4

1 に答える 1

6

オブザーバー パターンインスタンス マネージャーパターンの組み合わせを探しているようです。

の新しいインスタンスを作成するたびにLight、それをマネージャに追加します。イベントをトリガーしたい場合は、マネージャー内のインスタンスを反復処理して を呼び出しますupdate

何かのようなもの:

class LightManager
{
    static std::vector<Light> lights;
    static void notify()
    {
       for ( size_t i = 0 ; i < lights.size() ; i++ )
           lights[i].update();
    }
    static void add(const light& l)
    {
       lights.push_back(l);
    }
};

class Light
{
    Light()
    {
       LightManager::add(*this);
    }
};

次に、すべてのライトを次のように更新します。

LightManager::notify();
于 2012-06-05T19:10:03.170 に答える