1、typename 与 class
在模板引入 c++ 后,最初定义模板的方法为:template<class T>......。这里 class 关键字表明T是一个类型,后来为了避免 class 在这两个地方的使用可能给人带来混淆,所以引入了 typename 这个关键字,它的作用同 class 一样表明后面的符号为一个类型,这样在定义模板的时候就可以使用下面的方式了:template<typename T>......
在模板定义语法中关键字 class 与 typename 的作用完全一样。
2、模版
模板是实现代码重用机制的一种工具,实质就是实现类型参数化,即把类型定义为参数。C++提供两种模板:函数模板,类模板。
1.1、函数模版
//T可以是int、long、double
template<typename T> T mymax(T a, T b){
a = a > b ? a:b;
return a;
}
int reuslt1 = mymax<int>(10, 20); //<int>省略的话,类型会自动转换,但效率和安全性变低了,建议加上
printf("reuslt1=%d\n", reuslt1);
1.2、类模板
#include <iostream>
template <typename T> class Op{
public:
T peocess(T v){ return v * v; }
};
int main()
{
Op<int> opInt;//生成一个int类型操作的实例
Op<double> opDouble;
int reuslt1 = opInt.peocess(5);
double reuslt2 = opDouble.peocess(0.5);
printf("output: int:reuslt1=%d, double: reuslt2=%f\n", reuslt1, reuslt2);
}
网友评论