C++ 模板中的template typename 和template class的区别-阿里云开发者社区

开发者社区> 李牙刷儿> 正文

C++ 模板中的template typename 和template class的区别

简介:     本文翻译自:点击打开链接     在大多数情况下,template<typename T> 与template<class T>是可以相互通用的,而且在早期的C++ 版本中也只有template<class T>一种申明方式。     但是这种重复利用已存在的关键字的方式似乎会引起混淆。比如下面这样一个例子:      template &
+关注继续查看

    本文翻译自:点击打开链接

    在大多数情况下,template<typename T> 与template<class T>是可以相互通用的,而且在早期的C++ 版本中也只有template<class T>一种申明方式。

    但是这种重复利用已存在的关键字的方式似乎会引起混淆。比如下面这样一个例子:

    

template <class T>
class Demonstration {
public:
void method() {
    T::A *aObj; // oops …
     // …
};<span style="font-family: Arial, Helvetica, sans-serif;">	</span>

   代码的本意是想生命一个类型为T::A的对象指针 aObj,其中A是模板类T中的一个子类。但是编译器却会将这条语句理解成一个表达式,即T中的静态成员A 与 aObj相乘。这无疑并非是我们想要的。因为这种情况的出现,C++中引进了template<typename T>。一次来解决这种情况。

typename T::A* a6; // declare pointer to T’s A

    这条语句会告诉编译器这是一条声明语句,声明一个T的内部类A的指针对象。

    所以在选择使用typename和class时,如果没有上述的这种情况,那么二者可以通用;如果有,那么就必须使用typename! 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
C++中L和_T()之区别
字符串前面加L表示该字符串是Unicode字符串。_T是一个宏,如果项目使用了Unicode字符集(定义了UNICODE宏),则自动在字符串前面加上L,否则字符串不变。因此,Visual C++里边定义字符串的时候,用_T来保证兼容性。
653 0
「c/c++专业知识讲解」超详细讲解栈和堆的区别!
「c/c++专业知识讲解」超详细讲解栈和堆的区别!
949 0
Navigator和导航栏之间的区别以及用法场景的分析
区别:    1.navigator是属于小程序组件中的,导航栏是属于小程序API中的    2.navigator组件是用在axml页面中跳转的导航,它有4种类型(见下表);导航栏API是用在js中实现页面跳转的    3.
473 0
会员卡开卡表单模板配置(alipay.marketing.card.formtemplate.set)JAVA版本demo
官方接口文档:[url]https://docs.open.alipay.com/251/105668/[/url],我这里写的是开卡组件前两步的操作流程,仅供参考 1.调用接口前的准备工作(创建应用等)参考该文档:[url]https://docs.
743 0
11.C++(标准模板库,详细)
(创建于2018/1/2) #ifndef _ITERATOR_DEBUG_LEVEL #define _ITERATOR_DEBUG_LEVEL 0 #else #undef _ITERATOR_DEBUG_LEVEL #define _ITERAT...
871 0
C++中指针和引用的区别
指针和引用主要有以下区别: 引用必须被初始化,但是不分配存储空间。指针不声明时初始化,在初始化的时候需要分配存储空间。 引用初始化后不能被改变,指针可以改变所指的对象。 不存在指向空值的引用,但是存在指向空值的指针。
906 0
C++里大写TRUE和小写true区别
1.C++里有区别true是bool型的;TRUE是int型的,VC里这个是ms自己定义的; C++规定不允许只通过返回类型不同区别两个函数================================================你写错了吧……原函数声明是virtual BOOL Init...
908 0
+关注
李牙刷儿
Android开发者&amp;前端菜鸟,专注于跨平台、热修复领域
87
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载