Executor クラスには P 型のテンプレートがあり、コンストラクターで P オブジェクトを受け取ります。Algo クラスにはテンプレート E があり、E 型の静的変数もあります。Processor クラスには、テンプレート T と T のコレクションがあります。
Executor< Processor<Algo> >
質問とをどのように定義できますAlgo<Executor>
か? これは可能ですか?これを定義する方法がわかりません。「無限再帰テンプレート引数」のようなものです。
コードを参照してください。
template <class T>
class Processor {
map<string,T> ts;
void Process(string str, int i)
{
ts[str].Do(i);
}
}
template <class P>
class Executor {
P &p;
Executor(P &inp) : p(inp) {}
void Bar(string str, int i) {
p.Process(str,i);
}
Execute(string str)
{
}
}
template <class E>
class Algo
{
static E e;
void Do(int i) {}
void Foo()
{
e.Execute("xxx");
}
}
main ()
{
typedef Processor<Algo> PALGO; // invalid
typedef Executor<PALGO> EPALGO;
typedef Algo<EPALGO> AEPALGO;
Executor<PALGO> executor(PALGO());
AEPALGO::E = executor;
}
編集* ** * ** * ** * ** * ** * ** * ** * ** * ***
少し明確にします。Executor は、サービスを提供するシングルトンです。すべての Algo オブジェクトには Executor のサービスが必要です。Executor は、特定の Algo オブジェクトに送信する必要があるレポートを生成することがあります。これらは、プロセッサを介して正しいアルゴリズムに送信されます。
基本的な問題は、Executor を定義するには Algo が必要であり、Algo を定義するには Executor が必要であるということです。