C++中的typename和class完全一样吗?
来源:互联网 发布:cf网络出现异常 编辑:程序博客网 时间:2024/06/09 21:19
在模板中,定义模板类型template<class T>和template<typename T>都是一样的。C++书上说,因为template里面的class和类定义class名字有重合,为了防止歧义,引入typename来取代template中的class。但是,typename并不完全等于class的作用。typename还有一个作用。下面以STL中的源码
在STL中的map源代码文件中,看到map的如下定义:
template<class _Kty,
class _Ty,
class _Pr = less<_Kty>,
class _Alloc = allocator<pair<const _Kty, _Ty> > >
class map
: public _Tree<_Tmap_traits<_Kty, _Ty, _Pr, _Alloc, false> >
...{ // ordered red-black tree of {key, mapped} values, unique keys
public:
typedef map<_Kty, _Ty, _Pr, _Alloc> _Myt;
typedef _Tree<_Tmap_traits<_Kty, _Ty, _Pr, _Alloc, false> > _Mybase;
typedef _Kty key_type;
typedef _Ty mapped_type;
typedef _Ty referent_type; // retained
typedef _Pr key_compare;
typedef typename _Mybase::value_compare value_compare;
typedef typename _Mybase::allocator_type allocator_type;
typedef typename _Mybase::size_type size_type;
typedef typename _Mybase::difference_type difference_type;
typedef typename _Mybase::pointer pointer;
typedef typename _Mybase::const_pointer const_pointer;
typedef typename _Mybase::reference reference;
typedef typename _Mybase::const_reference const_reference;
typedef typename _Mybase::iterator iterator;
typedef typename _Mybase::const_iterator const_iterator;
typedef typename _Mybase::reverse_iterator reverse_iterator;
typedef typename _Mybase::const_reverse_iterator
const_reverse_iterator;
typedef typename _Mybase::value_type value_type;
....
class _Ty,
class _Pr = less<_Kty>,
class _Alloc = allocator<pair<const _Kty, _Ty> > >
class map
: public _Tree<_Tmap_traits<_Kty, _Ty, _Pr, _Alloc, false> >
...{ // ordered red-black tree of {key, mapped} values, unique keys
public:
typedef map<_Kty, _Ty, _Pr, _Alloc> _Myt;
typedef _Tree<_Tmap_traits<_Kty, _Ty, _Pr, _Alloc, false> > _Mybase;
typedef _Kty key_type;
typedef _Ty mapped_type;
typedef _Ty referent_type; // retained
typedef _Pr key_compare;
typedef typename _Mybase::value_compare value_compare;
typedef typename _Mybase::allocator_type allocator_type;
typedef typename _Mybase::size_type size_type;
typedef typename _Mybase::difference_type difference_type;
typedef typename _Mybase::pointer pointer;
typedef typename _Mybase::const_pointer const_pointer;
typedef typename _Mybase::reference reference;
typedef typename _Mybase::const_reference const_reference;
typedef typename _Mybase::iterator iterator;
typedef typename _Mybase::const_iterator const_iterator;
typedef typename _Mybase::reverse_iterator reverse_iterator;
typedef typename _Mybase::const_reverse_iterator
const_reverse_iterator;
typedef typename _Mybase::value_type value_type;
....
这里,可以看到,typedef typename _Mybase::value_compare value_compare来定义一个变量类型。那么这个value_compare的类型来源于_Mybase::value_compare,而这里typename就是指明,这个_Mybase::value_compare是一个类型,而不是一个成员变量。
- C++中的typename和class完全一样吗?
- C++中的class和typename
- 函数模板中 class 和typename 基本上一样,只是typename还多一项功能.
- C++中的typename和class对比
- c++的template中的class和typename
- c++的template中的class和typename .
- 在模板定义语法中关键字class与typename的作用完全一样。
- 关于typename和class
- class和typename
- typename和class
- typename和class
- 理解C++typename与class在模版中的使用
- C++ 模板中的typename和class的区别
- C++ 模板中的template typename 和template class的区别
- C++template中typename 和class的区别
- c++中的typename与class
- c++中的typename与class
- TypeName 与 class (C++)
- 母亲(红色的康乃馨)
- 实验报告民族正气拒毒丸的研究及提取
- .NET Framework 对多语言的支持机制
- Spring学习:使用Spring调度任务
- 孔乙己——纪念当今的穷酸大学生们
- C++中的typename和class完全一样吗?
- 《深入浅出MFC》
- FPGA中的时钟大讨论
- JBoss配置mysql数据
- 初学的
- JTA (XA)事务和JDBC事务
- 初学的,请多指教
- 百度百科之中秋节——百度又在中国一个新领域处于领先了,Google……
- 震撼心靈、定必落淚 - Paul Potts