基础知识
语法
template <typename T '>
函数声明或者定义
-
template 表示创建一个模板
-
typename 表明后面的符号是一种数据类型,可以用class代替
-
T:通用的数据类型,一般为大写字母,可以用其它字母表示
示例
#include <iostream>
using namespace std;
//函数模板声明
template <typename T>
void myswap(T& a,T &b);
int main(){
int a=1,b=2;
double c=1,d=2;
myswap(a,b);
myswap(c,d);
cout<<"a="<<a<<",b="<<b<<endl;
cout<<"c="<<c<<",d="<<d<<endl;
return 0;
}
//函数模板定义
template <typename T>
void myswap(T& a,T &b){
T c=a;
a=b;
b=c;
}
常见情形:
- 函数模板使函数定义更加简单,但不能缩短可执行程序,示例中仍由两个函数定义,
- 将模板放在头文件,并在需要使用模板的文件中包含头文件
局限性
语法规则
由于C++规则限制,编写的函数模板函数无法处理某些类型
字符串类型相乘会报语法错误。
示例
// 函数模板局限性,错误示范
#include <iostream>
using namespace std;
template<typename T>
T& fun(T&a ,T&b){
return a*b;
}
int main(){
char a='c';
char b='d';
fun(a,b);
return 0;
}