为什么对于依赖类型,单词 'typedef' 后面需要'typename'?
Why does the word 'typedef' need 'typename' after it for dependent types?
依赖类型通常需要 typename
告诉编译器成员是一种类型,而不是函数或变量。
但是,这是不是总是这样。
例如,基类不需要这个,因为它只能是一种类型:
template<class T> struct identity { typedef T type; }
template<class T> class Vector : identity<vector<T> >::type { }; // no typename
现在我的问题是,为什么typedef
在>?
typename
template<class T> class Vector
{
typedef typename /* <-- why do we need this? */ vector<T>::iterator iterator;
};
typedef
不需要出现在类型之前。
template <typename T>
struct S { typedef T type; };
template <typename T>
void f() { typename S<T>::type typedef t; }
这是完全有效的,在这种情况下,我希望您可以理解,如果typename
是可选的,解析会很复杂。
我可以理解
template <typename T>
void f() { typedef S<T>::type t; }
可以用不同的解释来解释,但这会引入意外情况,使typedef
关键字的位置突然变得很重要。
相关文章:
- C++:TypeDef使用元组
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 为什么在使用typedef时类推导指南会失败
- 为什么返回类型中需要typename?C++
- 尝试根据类中 typedef 的存在来专门化模板函数
- 如何重新定义MPI_FLOAT,MPI_DOUBLE以 typedef 的方式
- (typedef)typename迭代器在c++、qt中不起作用
- C 模板使用TypeName和将Typedef传递到功能
- 为什么对于依赖类型,单词 'typedef' 后面需要'typename'?
- 模板化类中的typedef typename
- typedef typename and Dependent scope
- 缩短C++枚举成员的路径(使用 typedef 或 typename),以用作模板参数
- C++——结合typedef和typename的语句的含义
- Visual Studio 2010 不喜欢 mixin 中的 typedef typename
- 在模板化类的typedef之后使用typename初始化函数时出错
- C++ typedef typename classname::template
- 即使typename关键字也会抛出Typedef错误
- 对于类型修改特征,我是否应该为 typename::transform<...>::type 提供一个模板 typedef(又名使用)方便包装器?
- 如何使用typename代替typedef
- typedef与继承中typename的用法