如何将返回类型声明为模板typename的内部类?

时间:2010-10-30 17:09:27

标签: c++ templates

如何声明:

template<typename T>
(T::ABC)& get();

它给出错误:

error: expected constructor, destructor, or type conversion before ‘&’ token

3 个答案:

答案 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();