複雑な質問で申し訳ありませんが、基本的にアイデアは非常に単純です。可変個引数クラステンプレートがあります:
template<class P1, class P2, class ... P3s>
class A
{
...
};
整数のテンプレートパラメーターNを受け取り、NP3sパラメーターを使用してAクラスをインスタンス化するAクラスジェネレーターが必要です。好き:
template<class P1, class P2, class P3, int N>
class GenA : /* somehow */ : public A<P1, P2, /* N times */ P3, P3, ...>
{
...
};
したがって、使用法は次のようになります。
// Generates A<Class1, Class2, Class3, Class3, Class3>
GenA<Class1, Class2, Class3, 3> a;
私はすでにコンパイル時の再帰と部分的な特殊化でそれをやってみました
template <class P1, class P2, int N, class P3>
class GenA : public GenA<P1, P2, N-1, P3, P3>
{
...
}
template <class P1, class P2, int N, class ... P3s>
class GenA<P1, P2, 0, P3s ...> : public A<P1, P2, P3s, ...>
{
...
}
ただし、C ++ 11は、2番目のテンプレートが最初のテンプレートの特殊化であると認識せず(実際には異なるため)、再帰の基本ケースに到達することはありません(再帰レベルが多すぎると文句を言うのをやめます)。 。何か案は?
ありがとう
Tunnuz