亚马逊的网站建设,企业网站建设视频,徐州哪家公司做网站水平好,c语言开发工具一、class与typename的相同点
typename关键字常用于函数模板#xff0c;这里首先引入函数模板的概念#xff1a;函数模板代表了一个函数家族#xff0c;该函数模板与类型无关#xff0c;在使用时被参数化#xff0c;根据实参类型产生函数的特定 类型版本
//函数模板格式…一、class与typename的相同点
typename关键字常用于函数模板这里首先引入函数模板的概念函数模板代表了一个函数家族该函数模板与类型无关在使用时被参数化根据实参类型产生函数的特定 类型版本
//函数模板格式
templatetypename T1,typename T2,....,typename Tn
返回值类型 函数名(参数列表){} 注意typename是用来定义模板参数关键字也可以使用class
//一段用于交换的函数模板
templatetypename T
void Swap( T left, T right)
{T temp left;left right;right temp;
}
注意在模板定义语法中关键字 class 与 typename 的作用完全一样
二、class与typename的不同点
以下面这段代码为例实现一个vector容器的迭代器begin()功能并函数模板的定义和实现分离
T是一个类模板的参数 是一个类型
C语法规定 如果被视为是类型名的话 是需要用typename去声明定义的
typename暗示着这个参数不必要是一个 class type类类型
如果在声明位置模板用了class 下面只要用template还是会把T强制当做类型名
声明使用用class T的话 实现要么就不写关键字 要么就得显示typename 不能显示用class
templateclass T//报错
vectorclass T::iterator vectorclass T::begin()
{return _start;
}templatetypename T//允许
vectorT::iterator vectorclass T::begin()
{return _start;
}templateclass T//允许
vectortypename T::iterator vectorclass T::begin()
{return _start;
}templatetypename T//允许
vectortypename T::iterator vectorclass T::begin()
{return _start;
}