码迷,mamicode.com
首页 > 其他好文 > 详细

typename T和class T区别与联系

时间:2017-09-01 01:01:45      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:标准   amp   typename   语法   数据类型   成员   对象   编译   而不是   

按 C++ 标准来说,template<typename T> 用于基础数据类型,typename 指类型名,T 可以取 char int double 等。

template<class T> 用于类,T 可以取任何类。

但是这里有一个问题,结构体应该用 typename 还是 class? 结构体肯定不是基础数据类型,但也不是类。

所以实际情况是,template<class T> 的 T 也可以取基础数据类型,tempate<typename T> 的 T 也可以取类。

但有一个特例,就是当 T 是一个类,而这个类又有子类(假设名为 innerClass) 时,应该用 template<typename>:

typename T::innerClass myInnerObject;

这里的 typename 告诉编译器,T::innerClass 是一个类,程序要声明一个 T::innerClass 类的对象,而不是声明 T 的静态成员,而 typename 如果换成 class 则语法错误。

typename T和class T区别与联系

标签:标准   amp   typename   语法   数据类型   成员   对象   编译   而不是   

原文地址:http://www.cnblogs.com/fenglongyu/p/7461112.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!