1. 例子

  1. // template只对第一个函数生效, 每个模板函数前面都有一个template
  2. template<typename T, typename T2> // template<class T1>
  3. void MySwap(T& a, T& b) {
  4. T tmp = a;
  5. b = a;
  6. a = tmp;
  7. }
  8. void test() {
  9. int a = 1;
  10. int b = 2;
  11. MySwap(a, b); // 自动类型推导
  12. MySwap<int>(a, b); // 显式类型推导
  13. }

2. 模板函数和普通函数的区别?

  1. 函数模板不允许自动类型转化 (传参必须严格按照类型匹配)

普通函数能自动类型转化(传参会根据类型自动匹配)

  1. template<typename T>
  2. int add(T a, T b) {
  3. return a + b;
  4. }
  5. int add(int a, char b) {
  6. return
  7. }
  8. void test()
  9. {
  10. int a = 1;
  11. int b = 2;
  12. char c = 3;
  13. char d = 3;
  14. add(a, b); //
  15. add(c, d); //
  16. add(a, b); //
  17. }

3. 模板函数和普通函数的调用规则

  1. template<typename T>
  2. int add(T a, T b) {
  3. return a + b;
  4. }
  5. int add(int a, int b) {
  6. return
  7. }