一、模板概念
泛型编程是以独立于任何特定类型的方式编写代码。使用泛型编程时,需要提供具体程序实例所操作的类型或者值。
模板是泛型编程的基础。模板是创建类或者函数的蓝图或者公式。通过给这些蓝图或者公式提供足够的信息,让这些蓝图或者公式真正地转变为具体的类或者函数,这种转变发生在编译时。
模板支持将类型作为参数的程序设计方式,从而实现了对泛型程序设计的直接支持。也就是说,C++模板机制允许在定义类、函数时将类型作为参数。
模板一般分为函数模板和类模板。
函数模板的定义并不会导致编译器生成相关代码,只有调用这个函数模板时,编译器才会实例化一个特定版本的函数并生成函数相关代码。编译器生成代码的时候,需要能够找到函数模板的函数体部分,所以函数模板的定义通常都是在.h头文件中。
函数模板中,有时需要提供模板参数,有时编译器自己推断模板参数。
二、模板定义和调用
//模板一:两个参数都是同一种类型,比如两个参数可以同时为double或者int类型
template <typename T>
T addFunc(T num1,T num2)
{
T addSum = num1 + num2;
return addSum;
}
//模板二:非类型模板,参数需为int常量
template <int num1, int num2>
int addFunc()
{
return (num1 + num2);
}
//模板三:非类型模版,两个参数,前一个无法确定类型(根据参数类型判断),第二个参数是int型常量
template <typename T,int num2>
double addFunc(T num1)
{
double addSum = num1 + num2;
return addSum;
}
//模板四:非类型模板
template <unsigned L1, unsigned L2>
int charscomp(char const (&p1)[L1],char const (&p2)[L2])
{
return strcmp(p1,p2);
}
int main()
{
int intA = 10, intB = 20,intTmp;
double floatA = 15.0, floatB=18.0,floatTmp;
int result;
intTmp = addFunc(intA,intB); //模板一:两个参数类型是一致的
floatTmp = addFunc(floatA, floatB); //模板一:两个参数类型是一致的
intTmp = addFunc(10,20); //模板二
floatTmp = addFunc<double,10>(23.0);//模板三
result = charscomp("111!","111!");//模板四
cout << result << endl;
return 0;
}
2022.08.11结。