1.函数模板

语法:在函数面前写上template <class T>, T就可以当做类型来使用

特点:

1.不调用不编译

2.有详细类型同名函数优先调用详细类型函数

3.调用时通过函数名和参数列表之间加入<具体类型>强制调用函数模板

例子:

#include<iostream>
using namespace std;
template <class T>
T add(T src, T dst)
{

return src+dst;
}
int add(int src, int dst)
{
cout<<"int"<<endl;
return src+dst;
}
void main()
{

cout<<add<int>(1,2)<<endl;
cout<<add('1','2')<<endl;
cin.get();
}

用途:

泛型接口

当有多个函数时,可以通过一个函数模板通过函数指针调用不同的函数

例子:

#include<iostream>
using namespace std;

int add(int src, int dst)
{
return src+dst;
}
int sub(int src, int dst)
{
return src-dst;
}
template <class T, class F>
T func(T src, T dst, F fun)
{
return fun(src, dst);
}
void main()
{
cout<<func(1,2,add)<<endl;
cout<<func(1,2,sub)<<endl;
//输出: 3
// -1
cin.get();
}