将模板的模板成员类型作为模板模板参数传递
Passing a template's template member type as a template template argument
A class WithTTMember
有一个名为 TT
.
的模板成员类型
struct WithTTMember {
template<typename> using TT = void;
};
另一个classExpectTT
取一个模板模板参数:
template< template<typename> typename TT >
struct ExpectTT {};
ExpectTT<WithTTMember::TT>
可以实例化成功
第三个 class ExpectTWithTT
需要一个名为 TT
的模板成员类型的模板参数,并使用它实例化 ExpectTT
:
template<typename T>
struct ExpectTWithTT {
using X = ExpectTT<typename T::TT>; // this doesn't compile
};
我希望 ExpectTWithTT<WithTTMember>::X
与 ExpectTT<WithTTMember::TT>
的类型相同。但是上面的代码编译失败。
我尝试根据编译器消息和我的直觉,使用 template
和 typename
关键字的组合注入错误行,但我无法让它工作。
如何表达我想要的?
任何 C++ 版本都可以。
您应该使用 template
关键字来表明 T::TT
是一个模板。
template<typename T>
struct ExpectTWithTT {
using X = ExpectTT<T::template TT>;
// ^^^^^^^^
};
A class WithTTMember
有一个名为 TT
.
struct WithTTMember {
template<typename> using TT = void;
};
另一个classExpectTT
取一个模板模板参数:
template< template<typename> typename TT >
struct ExpectTT {};
ExpectTT<WithTTMember::TT>
可以实例化成功
第三个 class ExpectTWithTT
需要一个名为 TT
的模板成员类型的模板参数,并使用它实例化 ExpectTT
:
template<typename T>
struct ExpectTWithTT {
using X = ExpectTT<typename T::TT>; // this doesn't compile
};
我希望 ExpectTWithTT<WithTTMember>::X
与 ExpectTT<WithTTMember::TT>
的类型相同。但是上面的代码编译失败。
我尝试根据编译器消息和我的直觉,使用 template
和 typename
关键字的组合注入错误行,但我无法让它工作。
如何表达我想要的?
任何 C++ 版本都可以。
您应该使用 template
关键字来表明 T::TT
是一个模板。
template<typename T>
struct ExpectTWithTT {
using X = ExpectTT<T::template TT>;
// ^^^^^^^^
};