赞
踩
typename关键字常用于函数模板,这里首先引入函数模板的概念:函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定 类型版本
- //函数模板格式
- template<typename T1,typename T2,....,typename Tn>
- 返回值类型 函数名(参数列表){}
注意:typename是用来定义模板参数关键字,也可以使用class
- //一段用于交换的函数模板
- template<typename T>
- void Swap( T& left, T& right)
- {
- T temp = left;
- left = right;
- right = temp;
- }
以下面这段代码为例:实现一个vector容器的迭代器begin()功能,并函数模板的定义和实现分离
T是一个类模板的参数 是一个类型
如果在声明位置模板用了class 下面只要用template还是会把T强制当做类型名
声明使用用class T的话 实现要么就不写关键字 要么就得显示typename 不能显示用class
- template<class T>//报错
- vector<class T>::iterator vector<class T>::begin()
- {
- return _start;
- }
-
- template<typename T>//允许
- vector<T>::iterator vector<class T>::begin()
- {
- return _start;
- }
-
- template<class T>//允许
- vector<typename T>::iterator vector<class T>::begin()
- {
- return _start;
- }
-
- template<typename T>//允许
- vector<typename T>::iterator vector<class T>::begin()
- {
- return _start;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。