pet*_*hen 2 c++ templates typename
可能的重复:
正式地说,typename 是什么?
当我使用
template <typename TMap>
typename TMap::referent_type * func(TMap & map, typename TMap::key_type key)
{ ... }
Run Code Online (Sandbox Code Playgroud)
第二行的两个“typename”的目的是什么?
它似乎触发了编译时警告(VS2008:C4346),但它只是“您声称这是一种类型”吗?
即在TMap::referent_type模板被实例化时进行实际检查是否实际类型,但似乎仍然有 C++ 标准的要求,但代码被正确解析。
有没有实际需要类型名来解决歧义的例子?或者还有更多吗?
该typename关键字只是告诉,无论标识下面是一个有效的类型编译器。这在模板中很重要,因为编译器可能还没有模板中使用的类型的定义,但您仍然希望能够使用该类型定义的一部分(例如,像key_type上面一样)。如果您没有使用typename关键字,编译器会在该符号上出错,因为它不知道它是什么。当您使用模板实例作为模板参数时,这经常出现。
清如泥?
| 归档时间: |
|
| 查看次数: |
431 次 |
| 最近记录: |