C++ typedef typename
[cpp] view plaincopy
template<typename T>
class A {
public:
typedef T a_type;
};
template<typename A>
class B {
public:
//typedef A::a_type b_type;
typedef typename A::a_type b_type;
};
int main() {
B<A<int>> b;
return ;
}
如果把注释取消,就会产生编译错误。 必须使用关键字typename的原因是T是一个template parameter。在实例化之前,编译器对T一无所知,因此不知道A::a_type 代表的是一个type或是一个member function或是一个data member,使用typename可以告诉编译器这是一个type使得编译能顺利通过
typename var_name;表示var_name的定义还没有给出,这个语句通常出现在模版的定义内,例如:
template
void f() {
typedef typename T::A TA; // 声明 TA 的类型为 T::A
TA a5; // 声明 a5 的类型为 TA
typename T::A a6; // 声明 a6 的类型为 T::A
TA * pta6; // 声明 pta6 的类型为 TA 的指针
} 因为T是一个模版实例化时才知道的类型,所以编译器更对T::A不知所云,为了通知
编译器T::A是一个合法的类型,使用typename语句可以避免编译器报错。
)template < typename var_name > class class_name; 表示var_name是一个类型,
在模版实例化时可以替换任意类型,不仅包括内置类型(int等),也包括自定义类型class。
这就是问题中的形式,换句话说,在template 和template 中,
typename和class的意义完全一样。
C++ typedef typename的更多相关文章
- typedef typename的用法
我自己最后在这篇文章里理解:[C++]typedef typename什么意思? typedef typename A::a_type b_type; 其中typename是告诉编译器A::a_typ ...
- typedef typename
所以根据上述两条分析, typedef typename RefBase::weakref_type weakref_type; 语句的真是面目是: typedef创建了存在类型的别名,而typen ...
- C++中的typedef typename 作用
今天在代码里看到了这样一段代码: typedef typename RefBase::weakref_type weakref_type; 起初一直搞不懂为什么要加个typename,后来搜索了一下才 ...
- C++ typedef typename 作用
C++ typedef typename 作用 C++的一些语法让人看着费解,其中就有: typedef typename std::vector<T>::size_type size_t ...
- 【转】C++ typedef typename 作用
转:https://blog.csdn.net/zhangxiao93/article/details/50569924 and GOOD: https://blog.csdn.net/vanturm ...
- typedef和typename关键字
.类型说明typedef 类型说明的格式为: typedef 类型 定义名; 类型说明只定义了一个数据类型的新名字而不是定义一种新的数据类型.定义名表示这个类型的新名字. 例如: 用下面语句定义整型数 ...
- C++之typename和typedef关键字
1. typename的作用 template <typename Distance> class KDTreeIndex : public NNIndex<Distance> ...
- C++箴言:理解typename的两个含义
C++箴言:理解typename的两个含义 问题:在下面的 template declarations(模板声明)中 class 和 typename 有什么不同? template<class ...
- C++中typename和class的区别
C++中typename和class的区别 在c++Template中很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢? 相信学习C++的人对c ...
随机推荐
- POJ 2455 Secret Milking Machine (二分+无向图最大流)
[题意]n个点的一个无向图,在保证存在T条从1到n的不重复路径(任意一条边都不能重复)的前提下,要使得这t条路上经过的最长路径最短. 之所以把"经过的最长路径最短"划个重点是因为前 ...
- I.MX6 Android frameworks services 文件架构
/******************************************************************************* * I.MX6 Android fra ...
- Oracle ORA-00119和ORA-00132的解决方案
今天在启动服务器上的ORACLE时遇到如下错误: SQL> startup; ORA-00119: invalid specification for system parameter LOCA ...
- json解析之jackson ObjectMapper
Json解析常用的有fastjson和jackson,性能上网上有不少的对比,说是fastjson比较好,今天先整理一下jackson的东西,后面再发一个fastjson的. jackson是spri ...
- GTK+布局管理
GTK+布局管理 GTK+ 布局管理 在本章中,我们将讲述如何将构件布置在窗口与对话框中. 当我们在设计应用程序的图形界面时,我们首先要决定的是在程序中用到哪种构件和管理应用程序中的这些构件.为了方便 ...
- 【译】 AWK教程指南 4通过文本内容和对比选择指定的记录
Pattern { Action }为awk中最主要的语法.若某Pattern的值为真则执行它后面的 Action. awk中常使用"关系表达式" (Relational Expr ...
- 2.3CUDA矩阵乘法
CPU 矩阵乘法 能相乘的两个矩阵,必须满足一个矩阵的行数和第二个矩阵的列数相同. A(N*P) * B(P*M) = C(N*M). 其中P是行数,N是列数, 从宽高的角度来说,即 A的宽度和B的高 ...
- matlab 函数说明--waitforbuttonpress
这个函数的名称取得不是太好,一眼看去,好像是等待按键的意思,但是实际上它等待的是按键或者鼠标事件,他的功能描述如下: 停止脚本的执行,直至当前活动的窗口上检测到了鼠标按下事件或者有效的键盘事件(有效是 ...
- MySQL UNION 与 UNION ALL 语法与用法
MySQL UNION 语法 MySQL UNION 用于把来自多个 SELECT 语句的结果组合到一个结果集合中.语法为: SELECT column,... FROM table1 UNION [ ...
- 50道经典的JAVA编程题(21-25)
50道经典的JAVA编程题(21-25),明天早上java考试了,还是坚持做题吧...这题比老师的题好多了! [程序21]TestJieCheng.java题目:求1+2!+3!+...+20!的和1 ...