C++ Typedef signature
C++ Typedef signature
可能重复:
我必须将“模板”以及“typename;关键词?
我看了这个boost::multi_array的例子,它有一个typedef
,比如:
template <typename Array>
...
typedef typename Array::template subarray<2>::type::iterator iterator2;
我了解
typedef typename <type> <new_type>;
签名看起来像,但在typedef typename
之后有三件事,我在网上找不到它的名字或作用。有人能分解一下typedef是做什么的吗?为什么它有三件事?我不认为这是特定于助推的。
Array::template
中的template
的工作原理与您已经理解的typename
完全相同。它在typedef
中的作用是告诉(承诺)编译器subarray
实际上是一个模板,因此<2>
是有意义的
这与typename
关键字在typedef
中的作用完全相同,但其效果是告诉编译器它是template
而不是类型。
这是旧的
typedef typename <type> <new_type>;
你已经明白了。
type
是typename Array::template subarray<2>::type::iterator
new_type
是iterator2
无论何时编写模板函数/类,编译器有时都需要一些帮助。在本例中,Array::template
是模板化类型内部的类型,这使得它需要typename
。
如果没有这种需要,typedef将只是:
typedef Array::template subarray<2>::type::iterator iterator2;
但是,这将(通常产生)编译器错误。要修复此错误,只需插入typename
关键字即可。
typedef typename Array::template subarray<2>::type::iterator iterator2;
typename
在这种情况下是一个帮助程序,让编译器知道这是一个类型。当编译器在依赖类型和限定类型之间进行选择时,模板中会使用关键字。
相关文章:
- C++:TypeDef使用元组
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 为什么在使用typedef时类推导指南会失败
- 尝试根据类中 typedef 的存在来专门化模板函数
- 如何重新定义MPI_FLOAT,MPI_DOUBLE以 typedef 的方式
- typedef 枚举和枚举类有什么区别?
- 在类模板中使用 typedef 时出错
- 模板类中的 typedef 语句
- 在 typedef 内部使用 const 关键字和在 typedef 外部使用 const 关键字之间有区别吗?
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- C++中"typedef"、"using"、"namespace"和"using namespace"有什么区别?
- 向前声明指向类的 typedef 指针
- 使用typedef'ed返回类型声明友元函数时出现编译器错误
- 如何创建 typedef 结构的前向声明
- 从 Typedef 数据类型中删除常量
- typedef vector size_type in header file
- typedef 别名的析构函数
- 如何使用 typedef 创建多个数组?
- 使用智能指针指向 C 库中的结构,该结构通过 typedef 隐藏实现(即不完整的类型)
- C++ Typedef signature