私は、ミックスインをバリデーションテンプレートパラメータとして受け入れることができるクラスをいくつか作成しました。しかし、CRTPイディオムを通して基本クラスにアクセスできるようにするためには、ミックスインも必要です。ここでは、非常に私がやりたいことができない、最小限の例です:一般化されたミックスイン
template <template <class> class... Mixins>
class Foo : Mixins<Foo<Mixins...>>... {};
はしかし、私はFoo
に渡すかもしれないミックスインは、一般的には、いくつかのテンプレートパラメータを持つことになりますので、のように:どのように
template <class Derived, class Type1, class Type2>
class Bar
{
Derived& operator()()
{
return static_cast<Derived&>(*this);
}
};
Foo
を変更して、いくつかの基本クラスから継承させることができます。ここで、各基本クラスで受け入れられるテンプレートパラメータを制御しますか? Foo
にテンプレートテンプレートパラメータのリストとそれに渡す引数のリストを渡すと、各テンプレートテンプレートパラメータとその引数をどのように関連付けることができるのかわかりません。これまでのところ、私はこのようなことを考えましたが、どのように進むのか分かりません。
template <template <class...> class T,
template <class...> class... Ts>
class Foo : /* How do I retrieve the arguments? */
これは明らかに最も洗練されたソリューションです。申し訳ありませんが、私の質問が少しあいまいでした。 –
@ void-pointer:必ずしもあいまいであるとは言えませんが、いくつかの層があり、私が解決しようとしていた問題をはっきりと表現することができたので、間違った方向に向いていれば修正できます。 –