Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 传递模板';s模板成员类型作为模板参数_C++_Templates_Template Templates - Fatal编程技术网

C++ 传递模板';s模板成员类型作为模板参数

C++ 传递模板';s模板成员类型作为模板参数,c++,templates,template-templates,C++,Templates,Template Templates,带有TTMember的类具有名为TT的模板成员类型 struct WithTTMember { template<typename> using TT = void; }; ExpectTT可以成功实例化 第三个类ExpectTWithTT需要一个名为TT的模板成员类型的模板参数,并使用它实例化ExpectTWithTT: template<typename T> struct ExpectTWithTT { using X = ExpectTT<

带有TTMember的类
具有名为
TT
的模板成员类型

struct WithTTMember {
    template<typename> using TT = void;
};
ExpectTT
可以成功实例化

第三个类
ExpectTWithTT
需要一个名为
TT
的模板成员类型的模板参数,并使用它实例化
ExpectTWithTT

template<typename T>
struct ExpectTWithTT {
    using X = ExpectTT<typename T::TT>;  // this doesn't compile
};
模板
结构ExpectTWithTT{
使用X=ExpectTT;//这不会编译
};
我希望
ExpectTWithTT::X
ExpectTT
的类型相同。但是上面的代码无法编译

我试着在编译器消息和我的直觉之后,用
模板
类型名
关键字的组合注入错误的行,但我无法让它工作

我如何表达我想要的

<>任何C++版本都很好。

你应该使用关键字来告诉你<代码> t::t/<代码>是模板。< /p>
template<typename T>
struct ExpectTWithTT {
    using X = ExpectTT<T::template TT>;
    //                    ^^^^^^^^
};
模板
结构ExpectTWithTT{
使用X=ExpectTT;
//                    ^^^^^^^^
};

哦,天哪,那很容易!我从
T::TT
开始,编译器告诉我添加
typename
,这显然是不好的。谢谢@是的,我同意这些关键词的用法令人困惑。:)@您好,您会发现这个问题特别有助于参考:
template<typename T>
struct ExpectTWithTT {
    using X = ExpectTT<T::template TT>;
    //                    ^^^^^^^^
};