2 hchchc6016 hchchc6016 于 2016.04.11 18:03 提问

定义模板类型关于typename和class的疑问

在百度上查了一下typename和class在表示有子类的类类型时候应该用typename而不用class
那么既然typename比class的使用范围广,那么为什么还要使用class呢?是不是还有什么其他区别?

2个回答

qq423399099
qq423399099   Ds   Rxr 2016.04.11 20:22
已采纳

在声明一个template type parameter(模板类型参数)的时候,class和typename意味着完全相同的东西。在c++Template中你完全可以用typename代替class.
一些程序员更喜欢在所有的时间都用 class,因为它更容易输入。
少数开发者在任何类型都被允许的时候使用 typename,而把 class 保留给仅接受user-defined types(用户定义类型)的场合。

CSDNXIAON
CSDNXIAON   2016.04.11 18:13

模板内部类型定义 typename::int
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C++中typename和class在声明模板时的区别
问题在下面的 template declarations(模板声明)中 class 和 typename 有什么不同?template<class T> class Widget; // uses "class" template<typename T> class Widget; // uses "typename"答案:没什么不同。在声明一个 template type parameter(模板
c++中模板使用时候typename和class的区别
在c++Template中很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢? 相信学习C++的人对class这个关键字都非常明白,class用于定义类,在模板引入c++后,最初定义模板的方法为: template...... 在 这里class关键字表明T是一个类型,后来为了避免class在这两个地方的使用可能给人带来混淆,所以引入了typ
C++模板中typename和class的区别
template与template一般情况下这两个通用,但有一个特例,就是当 T 是一个类,而这个类又有子类(假设名为 innerClass) 时,应该用 template: typename T::innerClass myInnerObject; 这里的 typename 告诉编译器,T::innerClass 是一个类,程序要声明一个 T::innerClass 类的对象,而不是声明
C++模板(关键字template,typename)介绍
转载地址:http://www.cnblogs.com/gw811/archive/2012/10/25/2738929.html C++模板   模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。   模板是一种对类型进行参数化的工具;   通常有两种形式:函数模板和类模板;   函数模板
模板(template)中typename的使用方法
声明template参数时, 前缀关键字class和typename可以互换; 使用关键字typename标识嵌套从属类型名称, 但不需在基类列表和成员初始化列表内使用. 从属名称(dependent names): 模板(template)内出现的名称, 相依于某个模板(template)参数, 如T t; 嵌套从属名称(nested dependent names):从属名称在cla
C++基础——关于模板的技巧性基础知识(typename、成员模板、模板的模板参数)
关键字typename的另一种用法 将成员函数和嵌套类也定义成模板 模板的模板参数(template template parameters)
C++模版中的typename关键字和嵌套依赖类型(依赖名称)
关于C++中模版常用的的typename和class,先写结论吧: 在声明模版参数时,class和typename关键是等价的,可以相互替换。 在涉及“嵌套依赖类型名”(nested dependent type name)的时候,必须用typename关键字去标识。 规则2有个例外,就是在继承列表或者成员初始化列表中的基类初始化时,可以不用typename去标识“嵌套依赖类型”。
c++中关于模板的typename和class的区别
模板最初的目的只是为了对类类型进行泛型操作的定义,因此用class关键字声明泛型类型。在之后的进化过程中发现了模板相互调用时产生的::操作符有二义性,即编译器不能判定::后的标示符是类的类型成员,还是类的数据成员,默认情况下,编译器假定这样的标示符指定的是数据成员,而不是类型。因此引入typename关键字用于告诉编译器将::符号后的标示符看作是类型,而且必须显式告诉。 template cla
C++ 模板template<class T>和template<typename T>有区别吗?
template和template都可以用来定义函数模板和类模板,在使用上,他们俩没有本质的区别。 在C++早期版本中,没有typename这个关键字,所以在模板定义的时候便使用了class。在C++后期的版本中,为了不再和class向混淆,所以加入了新的关键字typename用以区分。对于我个人而言,在定义模板函数时,更倡导使用typename关键字。 这里,顺便记录一下模板函数和模
C++ 的模板中 typename 关键字的用法
typename的使用场合:用处1, 用在模板定义里, 标明其后的模板参数是类型参数。 例如template<typename T, typename Y> T foo(const T& t, const Y& y){//....};templace<typename T> class CTest { private: T t; public: //... }其实,这里最常用的是使用关键字cl