A类WithTTMember
有一个名为 TT
的模板成员类型.
struct WithTTMember {
template<typename> using TT = void;
};
另类ExpectTT
接受一个模板模板参数:template< template<typename> typename TT >
struct ExpectTT {};
ExpectTT<WithTTMember::TT>
可以成功实例化。三等舱
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
的组合注入(inject)故障线路和 typename
编译器消息和我的直觉之后的关键字,但我无法让它工作。如何表达我想要的?
任何 C++ 版本都可以。
最佳答案
您应该使用 template
关键字告诉 T::TT
是一个模板。
template<typename T>
struct ExpectTWithTT {
using X = ExpectTT<T::template TT>;
// ^^^^^^^^
};
关于c++ - 将模板的模板成员类型作为模板模板参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66254082/