当前位置:   article > 正文

class与typename的异同_typename和class的区别

typename和class的区别

一、class与typename的相同点

typename关键字常用于函数模板,这里首先引入函数模板的概念:函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定 类型版本

  1. //函数模板格式
  2. template<typename T1,typename T2,....,typename Tn>
  3. 返回值类型 函数名(参数列表){}

 注意:typename是用来定义模板参数关键字,也可以使用class

  1. //一段用于交换的函数模板
  2. template<typename T>
  3. void Swap( T& left, T& right)
  4. {
  5. T temp = left;
  6. left = right;
  7. right = temp;
  8. }

注意:在模板定义语法中关键字 class 与 typename 的作用完全一样

二、class与typename的不同点

以下面这段代码为例:实现一个vector容器的迭代器begin()功能,并函数模板的定义和实现分离

T是一个类模板的参数 是一个类型

C++语法规定 如果被视为是类型名的话 是需要用typename去声明定义的 

typename暗示着这个参数不必要是一个 class type(类类型)

如果在声明位置模板用了class 下面只要用template还是会把T强制当做类型名 

声明使用用class T的话 实现要么就不写关键字 要么就得显示typename 不能显示用class

  1. template<class T>//报错
  2. vector<class T>::iterator vector<class T>::begin()
  3. {
  4. return _start;
  5. }
  6. template<typename T>//允许
  7. vector<T>::iterator vector<class T>::begin()
  8. {
  9. return _start;
  10. }
  11. template<class T>//允许
  12. vector<typename T>::iterator vector<class T>::begin()
  13. {
  14. return _start;
  15. }
  16. template<typename T>//允许
  17. vector<typename T>::iterator vector<class T>::begin()
  18. {
  19. return _start;
  20. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/576893
推荐阅读
相关标签
  

闽ICP备14008679号