私は、プログラムの実行を制御する単一のマネージャを持つ従来のソフトウェアを持っています。プログラムの実行中にさまざまなコールバッククラスのメソッドを呼び出します。これらはユーザーフックです。問題は、これら1000個の異なるフックのことです。 1)それぞれ明らかに異なるインターフェースを持っています。 2)実行マネージャーにはそれぞれのスロットが1つしかありません。コンポーネントのリストにコールバックを渡すためのラッパーC++
私は、ユーザーが実行マネージャーを使って各ユーザーフックインクラスのインスタンスを1つだけ登録できるようにしても、私のグループのスパゲッティコードが多くなることに気付きました。私はフックのリストを含む単純なラッパーを記述し、リストをループして各インスタンスのコールバックを呼びたいと思います。例:
class SomeLegacyUserActionClass
{
public:
virtual void A();
virtual void B();
};
class MyWrapper : public SomeLegacyUserActionClass
{
std::vector< SomeLegacyUserActionClass* > actionList;
public:
void A()
{
// loop over each action in actionList
{
action->A();
}
}
void B()
{
// loop over each action in actionList
{
action->B();
}
}
void addAction(SomeLegacyUserActionClass* action) { ... }
};
これは、とても多くのクラスでは非常に面倒で醜いものになっています。テンプレートクラスを作る方法や、これを行う方法がありますか?明らかにここにパターンがありますが、私は何とかC++でそれを活用できるかどうか分かりません。
私のグループには、すべての行動に対してデコレータパターンを実装して、ベクトルとループを取り除くことができたと思います。
おかげ