#include<iostream>usingnamespace std;// 函数模板// 交换两个整数型voidswapInt(int&a,int&b){int temp = a;
a = b;
b = temp;}// 交换两个浮点型voidswapDouble(double& a,double& b){double temp = a;
a = b;
b = temp;}voidtest01(){int a =10;int b =20;swapInt(a, b);
cout <<"a = "<< a << endl;
cout <<"b = "<< b << endl;double c =10.1;double d =20.1;swapDouble(c, d);
cout <<"c = "<< c << endl;
cout <<"d = "<< d << endl;}// 实例://函数模板template<typenameT>//声明一个模板,告诉编译器后面代码中紧跟着的T不要报错,T是一个通用数据类型voidmySwap(T &a,T&b){
T temp = a;
a = b;
b = temp;}voidtest02(){int a =10;int b =20;//利用函数模板交换//两种方式使用函数模板//1、自动类型推导mySwap(a, b);
cout <<"a = "<< a << endl;
cout <<"b = "<< b << endl;double c =10.1;double d =20.1;//2、显示指定类型mySwap<double>(c, d);
cout <<"c = "<< c << endl;
cout <<"d = "<< d << endl;}intmain(){test01();test02();return0;}
示例:
#include<iostream>#include<optional>template<typenameT>boolisEqual(T a, T b){return a == b;}template<typenameT,typename... Args>// Args是一个模板参数包,包就是0-多个的意思,表示0或多个模板类型参数boolisEqual(T a, T b, Args... args){// args是一个参数包,包就是0-多个的意思,表示0或多个参数return a == b &&isEqual(args...);}intmain(){// 编译器会推断包中的参数的数目,写多少不同的参数个数和类型,编译器会实例化出多少个不同的版本if(isEqual(1,1,2,2,3,3,4,4)){
std::cout <<"OK";}}