traits技术

STL标准模板库非常强调软件的复用,traits的中文意思就是特性,traits就像特性萃取机,提取不同类的共性,以便能统一处理。traits依靠显式模板特殊化来把代码中因类型不同而发生变化的片段拖出来,用统一的接口来包装。

已知整型数组类CIntArray,浮点数组类CFloatArray,求整型或浮点数组的和乘以相应倍数并输出。
#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 NumTraits		// NumTraits可以什么内容都不写,只是说明该类是一个模板类
{
};

// 模板特化
template<>
class NumTraits<CIntArray>
{
public:
	typedef int resulttype;
	typedef int inputpara;
};

template<>
class NumTraits<CFloatArray>
{
public:
	typedef float resulttype;
	typedef float inputpara;
};

// 统一模板调用类编制
template<class T>
class CApply
{
public:
	typedef typename NumTraits<T>::resulttype result;
	typedef typename NumTraits<T>::inputpara input;
	result GetSum(T &obj, input in)
	{
		return obj.GetSum(in);
	}
};

int main()
{
	CIntArray intary;
	CFloatArray floatary;
	CApply<CIntArray> one;
	CApply<CFloatArray> two;
	cout << "整型数组和3倍是:" << one.GetSum(intary, 2) << endl;
	cout << "浮点数组和3.2倍是:" << two.GetSum(floatary, 3.2f) << endl;

	return 0;
}

(最近更新:2019年09月08日)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值