关键字typename(针对C++)

如果你有一个合适的名字来指定一个类型,并且这个名字依赖于模板的参数,请使用关键字 typename。在模板的声明和定义中只使用关键字typename。下面的例子说明使用关键字typename。

1 template<class T> class A
2 {
3 T::x(y);
4 typedef char C;
5 A::C d;
6 }

表达式 T::x(y) 是含糊不清的。它可能是一个调用非本地参数值 y 的函数 x() ,也可能是一个声明类型为 T::x 的变量 y 。C++将把这句表达式理解为一个函数的调用。为了让编译器把这句表达式理解为一个类型,你应该在表达式的开头添加关键字 typename 。表达式 A::C 是一个错误格式。这个类 A 同样指的是 A<T> ,因此依赖于模板参数。你必须添加关键字 typename 到声明的开头。

1 typename A::C d;

在模板参数的声明中,你同样能够在使用关键字 class的地方使用关键字 typename 。

附加说明:如果你不使用typename,会有如下的错误提示:

 error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int

翻译原文:

http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8a.doc%2Flanguage%2Fref%2Fkeyword_typename.htm

 

原文地址:https://www.cnblogs.com/BreakMind/p/2388367.html