traits技术详解
来源:互联网 发布:淘宝认证服务商 编辑:程序博客网 时间:2024/05/22 17:24
STL模版库非常强调软件的复用,traits技术是采用的重要手段。traits提取不同类的共性,以便能统一处理。traits技术依靠显示模版特殊化来把代码中因类型不同而发生变化的片段拖出来,用统一的接口来包装。这个接口可以包含一个C++类所能包含的任何东西,如内嵌类型、成员函数、成员变量。作为客户的模版代码,可以通过traits模版类所公开的接口来简洁访问。
运行结果如下:
程序运行结果为:
示例:一直整形数组类CIntArray,浮点数组类CFloatArray,求整形或浮点数组的和乘以相应倍数并输出。代码如下:
#include "stdafx.h"#include<iostream>using namespace std;class CIntArray{int a[10];public:CIntArray(){for(int i = 0;i < 10;i++){a[i] = i+1;}}int GetSum(int times){int sum=0;for(int i=0;i<10;i++){sum+=a[i];}return sum*times;}};class CFloatArray{float f[10];public:CFloatArray(){for(int i=1;i<=10;i++)f[i-1]=1.0f/i;}float GetSum(float times){float sum=0.0f;for(int i=0;i< 10;i++){sum+=f[i];}return sum*times;}};int _tmain(int argc, _TCHAR* argv[]){CIntArray intary;CFloatArray fltary;cout<<"3 times of sum of int array is"<<intary.GetSum(3)<<endl;cout<<"3.2 times of sum of float array is"<<fltary.GetSum(3.2f)<<endl;return 0;}
运行结果如下:
通过对上面的代码进行分析,CintArray、CFloatArray功能相似,在main函数中都是通过调用两个类的GetSum函数完成。 那么可以通过设计一个类的接口来完成上述功能。
#include "stdafx.h"#include<iostream>using namespace std;class CIntArray{int a[10];public:CIntArray(){for(int i = 0;i < 10;i++){a[i] = i+1;}}int GetSum(int times){int sum=0;for(int i=0;i<10;i++){sum+=a[i];}return sum*times;}};class CFloatArray{float f[10];public:CFloatArray(){for(int i=1;i<=10;i++)f[i-1]=1.0f/i;}float GetSum(float times){float sum=0.0f;for(int i=0;i< 10;i++){sum+=f[i];}return sum*times;}};template<class T>class CApply{public:float GetSum(T& t,float inpara){return t.GetSum(inpara);}};int _tmain(int argc, _TCHAR* argv[]){CIntArray intary;CFloatArray fltary;CApply<CIntArray> c1;CApply<CFloatArray> c2;cout<<"3 times of sum of int array is"<<c1.GetSum(intary,3)<<endl;cout<<"3.2 times of sum of float array is"<<c2.GetSum(fltary,3.2f)<<endl;return 0;}
程序运行结果为:
通过对上面的代码进行分析,CintArray、CFloatArray功能相似,在main函数中都是通过调用两个类的GetSum函数完成。 那么可以通过设计一个类的接口来完成上述功能。如何解决输入、输出参数类型的不同呢?这就需要本文介绍的traits技术了。
- traits技术详解
- traits技术详解
- C++学习 traits技术详解
- traits:Traits技术初探
- traits:Traits技术初探
- traits:Traits技术初探
- traits:Traits技术初探
- traits:Traits技术初探
- traits:Traits技术初探
- Traits技术
- Traits技术
- Traits 技术
- Traits技术
- traits:Traits技术学习笔记
- Traits技术初探
- Traits技术初探
- Traits 技术(转)
- Traits技术初探
- svn图标含义
- Error generating final archive: Debug certificate expired on的解决办法
- TortoiseSVN中图标的含义
- 关于用struts所配置的Action默认页面的跳转问题
- 64位多核 MIPS 异常和中断结构
- traits技术详解
- struts2 提交表单
- C/C++程序员应该掌握的东西
- 关于C语言参数传递的新知
- oracle 数据库主键自动增长方法
- iOS获取当前位置信息
- Exception in thread "main" java.lang.AbstractMethodError
- du结果与ls -l结果相比偏高偏低的原因分析
- 循环中断