C++函数模板
来源:互联网 发布:投行 知乎 编辑:程序博客网 时间:2024/06/05 04:05
函数模板可以重载,只要它们的形参表不同即可
Example:template<class T1, class T2>void print(T1 arg1, T2 arg2){ cout << arg1 << “ ” << arg2 << endl;}template<class T>void print(T arg1, T arg2){ cout << arg1 << “ ” << arg2 << endl; }
C++编译器遵循以下优先顺序:
Step 1: 先找参数完全匹配的普通函数(非由模板实例化而得的函数)
Step 2: 再找参数完全匹配的模板函数
Step 3: 再找实参经过自动类型转换后能够匹配的普通函数
Step 4: 上面的都找不到, 则报错
例: 函数模板调用顺序
template <class T>T Max(T a, T b){ cout << "Template Max 1" <<endl; return 0;}template <class T, class T2>T Max(T a, T2 b){ cout << "Template Max 2" <<endl; return 0;}double Max(double a, double b){ cout << "MyMax" << endl; return 0;}int main(){ int i=4, j=5; Max(1.2,3.4); //调用Max(double, double)函数 Max(i, j); //调用第一个T Max(T a, T b)模板生成的函数 Max(1.2, 3); //调用第二个T Max(T a, T2 b)模板生成的函数 return 0;}
赋值兼容原则引起函数模板中类型参数的二义性
template<class T>T myFunction(T arg1, T arg2){ cout<<arg1<<“ ”<<arg2<<“\n”; return arg1;} …myFunction(5, 7); //ok: replace T with intmyFunction(5.8, 8.4); //ok: replace T with doublemyFunction(5, 8.4); //error: replace T with int or double? 二义性
可以在函数模板中使用多个类型参数, 可以避免二义性
template<class T1, class T2>T1 myFunction( T1 arg1, T2 arg2){ cout<<arg1<<“ ”<<arg2<<“\n”; return arg1;} …myFunction(5, 7); //ok:replace T1 and T2 with intmyFunction(5.8, 8.4); //ok: replace T1 and T2 with doublemyFunction(5, 8.4); //ok: replace T1 with int, T2 with double
0 0
- 【c/c++】函数模板和模板函数
- C/C++ 函数模板
- c++:函数模板
- 【C++】函数模板
- 【c++】函数模板
- C语言函数模板
- C++:函数模板
- 【C++】模板函数总结!!!
- C/C++:函数模板与类模板
- [C/C++]模板函数与模板类
- 学习C++模板---模板函数
- Linux C/C++ 模板:函数模板
- C++,template,类模板和函数模板
- C++:函数模板、类模板及其特化
- C++---函数模板与类模板
- C++_函数模板基础知识
- C语言实现函数模板
- C++_函数模板基础知识
- 黑马程序员——面向对象(一)
- 并查集
- Javah使用问题:无法访问android.app.Activity
- centos7 中tcp连接问题
- C语言文件操作详解
- C++函数模板
- Android Handler详解
- Excel Sheet Column Title
- Android面试题目
- collect2: error: ld returned 1 exit status
- Same Tree
- QThread与其他线程间相互通信,emit,发射信号
- [Leetcode]Palindrome Partitioning II
- android activity详解