c++模板学习
2015-06-07 17:34
246 查看
重载函数模板
和普通函数一样,函数模板也可以被重载
1、模板函数为不同的模板实参定义了一个函数家族
2、当你传递模板实参的时候,可以根据实参的类型来对函数模板进行实例化
3、可以显式指定模板参数
4、可以重载函数模板
5、当重载函数模板时,把你的改变限制在:显式地指定模板参数
6、一定要让函数模板得所有重载版本的声明都位于它们被调用的位置之前
和普通函数一样,函数模板也可以被重载
#include<stdio.h> #include<iostream> #include<string> using namespace std; //1、求两个int值的最大值, inline int const& Max(int const& a, int const& b){ return a<b ? b:a; } //2、求两个任意类型值中的最大者,通过传引用进行调用 template<class T> inline T const& Max(T const&a, T const& b){ return a<b ? b:a; } //3、求三个任意类型值中的最大者,通过传引用进行调用 template<typename T> inline T const& Max(T const& a, T const& b, T const& c){ return max(max(a,b),c); } //也可以为指针和普通的字符串重载这个求最大值的模板 //求两个指针所指向值的最大者 template<typename T> inline T* const& Max(T* const& a, T* const& b){ return *a<*b ? b:a; } //求两个c字符串的最大者 inline char const* const& Max( char const* const& a, char const* const& b){ return strcmp(a,b)<0 ? b:a; } int main(){ cout<<Max(7,12,68)<<endl;//调用具有3个参数的模板,即第3个函数 cout<<Max('a','b')<<endl;//调用max<char>(通过实参演绎),即第2个函数 cout<<Max(42.5,22.5)<<endl;//调用max<double>(通过实参演绎),即第2个函数 cout<<Max<>(7,42)<<endl;//调用max<int>(通过实参演绎) cout<<Max<double>(7,42)<<endl;//调用max<double>(没有实参演绎),即第2个函数 cout<<Max(7,42)<<endl;//调用int重载的非模板函数,即第1个函数 /***********************对于不同类型的参数,只允许使用非模板函数*******************/ cout<<Max('a',107.7)<<endl;//通过int重载的非模板函数,即第1个函数 cout<<Max(7,33.5)<<endl;//调用int重载的非模板函数,即第1个函数 int a=7; int b=43; string s="hey"; string t="you"; cout<<Max(s,t)<<endl;//求两个string类型的最大值 int*p1=&a; int*p2=&b; cout<<Max(p1,p2)<<endl; char const*s1="david"; char const*s2="nico"; cout<<Max(s1,s2)<<endl; system("pause"); }总结:
1、模板函数为不同的模板实参定义了一个函数家族
2、当你传递模板实参的时候,可以根据实参的类型来对函数模板进行实例化
3、可以显式指定模板参数
4、可以重载函数模板
5、当重载函数模板时,把你的改变限制在:显式地指定模板参数
6、一定要让函数模板得所有重载版本的声明都位于它们被调用的位置之前
相关文章推荐
- C++ primer 箭头操作符重载心得体会
- uefi的c++编程支持new和delete
- 用C++写uefi程序
- 一起talk C栗子吧(第十二回:C语言实例--单链表一)
- C++ 调用system()函数的多命令合并
- 关于C++函数思考2(C++函数返回引用和返回非引用的区别)
- C语言(1) HelloWord 与JAVA对比
- C++和JAVA的区别
- 面试考题之9.2:链表(C/C++版)
- 用C++实现多线程Mutex锁(Win32)
- C++11:override 与 final
- C/C++ 语言中的表达式求值
- C语言多线程下不同等级日志的实现
- c++ 访问者模式
- c++在string类源
- Microsoft Visual C++ Runtime Library Runtime Error解决的方式
- 在mfc中使用cef
- 设计模式之访问者模式,C++实现
- Effective C++ 条款45
- effective c++ 条款7