Base
2 つのテンプレート パラメータを持つテンプレート クラスが必要です。特に、2 番目のパラメーターはテンプレート パラメーターです。CRTPDerived
から派生します。のようなBase
基本クラスを生成したいのですが、生成する基本クラスは の実際の基本クラスと同じではありません。テンプレートを送信するにはどうすればよいですか?Derived
Base<Derived,Derived::second_tmpl>
Derived
#include <type_traits>
template<typename T, template<typename>class U>
struct Base
{
using type = Base<T,U>;
using devired_type = T;
template<typename V>
using second_tmpl = U<V>;
using second_type = second_tmpl<type>;
};
template<typename T>
struct Template
{
using type = Template<T>;
};
struct Derived
:public Base<Derived,Template>
{
};
//true
static_assert(
std::is_same<
Derived::second_type,
Template<Base<Derived,Template>>>::value,
"false");
//false
static_assert(
std::is_base_of<
Base<Derived,Derived::second_tmpl>,
Derived
>::value,
"false");
template<typename T>
using Template2 = Template<T>;
//false
static_assert(
std::is_same<
Base<Derived,Template>,
Base<Derived,Template2>
>::value,
"false");
元のテンプレートではなく、元のテンプレートと同じテンプレートを使用してください。判断は誤りです。