59-类模板深度剖析
来源:互联网 发布:淘宝的支付方式 编辑:程序博客网 时间:2024/06/06 18:13
1、多参数类模版
2、类模版可以被特化
3、
#include <iostream>#include <string>using namespace std;//类模板:两个参数的类模板:template< typename T1, typename T2 >class Test{public: void add(T1 a, T2 b) { cout << "void add(T1 a, T2 b)" << endl; cout << a + b << endl; }};//指针特化:template< typename T1, typename T2 >class Test < T1*, T2* > // 关于指针的特化实现{public: void add(T1* a, T2* b) { cout << "void add(T1* a, T2* b)" << endl; cout << *a + *b << endl; }};//类模板的部分特化;模版参数指定两个类型参数完全相同template< typename T >class Test < T, T > // 当 Test 类模板的两个类型参数完全相同时,使用这个实现{public: void add(T a, T b) { cout << "void add(T a, T b)" << endl; cout << a + b << endl; } void print() { cout << "class Test < T, T >" << endl; }};//完全特化,类模板的参数为空,两个参数都为void*类型时template< >class Test < void*, void* > // 当 T1 == void* 并且 T2 == void* 时{public: void add(void* a, void* b) { cout << "void add(void* a, void* b)" << endl; cout << "Error to add void* param..." << endl; }};int main(){ //类模板根据参数的不同,去调用不同的特化实现 Test<int, float> t1; Test<long, long> t2; Test<void*, void*> t3; t1.add(1, 2.5); t2.add(5, 5); t2.print(); t3.add(NULL, NULL); Test<int*, double*> t4; int a = 1; double b = 0.1; t4.add(&a, &b); return 0;}void add(T1 a, T2 b)3.5void add(T a, T b)10class Test < T, T >void add(void* a, void* b)Error to add void* param...void add(T1* a, T2* b)1.1
4、注意事项
5、问题
6、特化深度分析
7、
#include <iostream>#include <string>using namespace std;template< typename T1, typename T2 >class Test{public: void add(T1 a, T2 b) { cout << "void add(T1 a, T2 b)" << endl; cout << a + b << endl; }};/*template< >class Test < void*, void* > // 当 T1 == void* 并且 T2 == void* 时{public: void add(void* a, void* b) { cout << "void add(void* a, void* b)" << endl; cout << "Error to add void* param..." << endl; }};*///类重定义class Test_Void{public: void add(void* a, void* b) { cout << "void add(void* a, void* b)" << endl; cout << "Error to add void* param..." << endl; }};//函数模版template< typename T >bool Equal(T a, T b){ cout << "bool Equal(T a, T b)" << endl; return a == b;}//函数模版的完全特化template< >bool Equal<double>(double a, double b){ const double delta = 0.00000000000001; double r = a - b; cout << "bool Equal<double>(double a, double b)" << endl; return (-delta < r) && (r < delta);}//重载函数bool Equal(double a, double b){ const double delta = 0.00000000000001; double r = a - b; cout << "bool Equal(double a, double b)" << endl; return (-delta < r) && (r < delta);}int main(){ cout << Equal( 1, 1 ) << endl;//调用普通函数模版 cout << Equal( 0.001, 0.001 ) << endl;//调用重载函数 cout << Equal<double>( 0.001, 0.001 ) << endl;//调用函数模版的完全特化 cout << Equal<>( 0.001, 0.001 ) << endl;//调用函数模版,然后根据参数调用函数模版的完全特化 return 0;}bool Equal(T a, T b)1bool Equal(double a, double b)1bool Equal<double>(double a, double b)1bool Equal<double>(double a, double b)1
8、工程中建议
9、小结
阅读全文
0 0
- 59-类模板深度剖析
- C++模板剖析:函数模板、类模板解析
- 深度剖析COleDateTime和COleDateTimeSpan类
- Android的suiface类源码深度剖析
- 深度剖析COleDateTime和COleDateTimeSpan类
- Objective-C类成员变量深度剖析
- Objective-C类成员变量深度剖析
- Objective-C类成员变量深度剖析
- Java记录 -25- String类深度剖析
- 空指针深度剖析
- 空指针深度剖析
- 以太网深度剖析
- "长尾"深度剖析
- 深度剖析“考研现象”
- 深度剖析:具名常量
- 深度剖析云存储
- 深度剖析云存储
- #ifdef __cplusplus深度剖析
- n皇后 洛谷p1219||tyvj1080
- 研究生应该具备的学术素养
- 微信小程序的两种跳转方式
- java解析html
- 能感知的痛与不能感知的痛
- 59-类模板深度剖析
- hibernate使用报错
- 【安全牛学习笔记】xss跨站
- MyBatis入门
- 博客已搬家
- 【HDU
- ios-换肤简单实现
- PopupWindow设置背景
- leetcode Word Search