如何声明:
template<typename T>
(T::ABC)& get();
它给出错误:
error: expected constructor, destructor, or type conversion before ‘&’ token
答案 0 :(得分:3)
使用typename
关键字:
template<typename T>
typename T::ABC& get();
答案 1 :(得分:3)
正确的表格没有括号
typename T::ABC
因为带括号的表格
(typename T::ABC)
是一个强制转换操作符,而不是一个类型!
此外,关键字typename
是必需的,因为T:ABC
是“依赖类型”:如果您不使用typename
,则表达式T:ABC
被解释为ABC是T类的成员,而不是嵌套类型。
答案 2 :(得分:1)
必须是:
template<typename T>
typename T::ABC& get();
但是我试过了,哪些不起作用:
template<typename T>
(typename T::ABC)& get();