1. 例子
// template只对第一个函数生效, 每个模板函数前面都有一个template
template<typename T, typename T2> // template<class T1>
void MySwap(T& a, T& b) {
T tmp = a;
b = a;
a = tmp;
}
void test() {
int a = 1;
int b = 2;
MySwap(a, b); // 自动类型推导
MySwap<int>(a, b); // 显式类型推导
}
2. 模板函数和普通函数的区别?
- 函数模板不允许自动类型转化 (传参必须严格按照类型匹配)
普通函数能自动类型转化(传参会根据类型自动匹配)
template<typename T>
int add(T a, T b) {
return a + b;
}
int add(int a, char b) {
return
}
void test()
{
int a = 1;
int b = 2;
char c = 3;
char d = 3;
add(a, b); //
add(c, d); //
add(a, b); //
}
3. 模板函数和普通函数的调用规则
template<typename T>
int add(T a, T b) {
return a + b;
}
int add(int a, int b) {
return
}