Traits技术

本文深入探讨了C++中的Traits技术,这是一种用于提取不同类共性的高级编程技巧。通过模板元编程,Traits技术允许开发者以统一的接口封装变化的代码片段,实现类型安全且灵活的代码复用。文章提供了详细的代码示例,包括如何为不同的类(如CIntArray和CFloatArray)创建特化的Traits模板类,以及如何使用CApply类作为对外接口调用这些类的方法。
Traits技术
  • traits=特性

提取不同类的共性,统一处理

依靠显示模板特殊化,把代码中因不同类型发生变化的片段提取出,用统一的接口来包装

接口可以为c++类所能包含的任何东西

客户通过traits模板类公开的接口来间接访问

  • 代码示例
#include <iostream>

using namespace std;

class CIntArray
{
public:
	CIntArray();
	~CIntArray(){}

	int GetSum(int times);

private:
	int m_a[10];

};

CIntArray::CIntArray()
{
	for (int i = 0; i < 10; i++) {
		m_a[i] = i + 1;
	}
}

int CIntArray::GetSum(int times)
{
	int sum = 0;
	for (int i = 0; i < 10; i++) {
		sum += m_a[i];
	}
	return sum * times;
}


class CFloatArray
{
public:
	CFloatArray();
	~CFloatArray(){}

	float GetSum(float times);

private:
	float m_a[10];

};

CFloatArray::CFloatArray()
{
	for (int i = 0; i < 10; i++) {
		m_a[i] = i + 1;
	}
}

float CFloatArray::GetSum(float times)
{
	float sum = 0.0;
	for (int i = 0; i < 10; i++) {
		sum += m_a[i];
	}
	return sum * times;
}

// traist模板类
template<class T>
class 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 cInt;
	CApply<CIntArray> ci;
	std::cout << ci.GetSum(cInt, 3) << std::endl;

	CFloatArray cFloat;
	CApply<CFloatArray> cf;
	std::cout << cf.GetSum(cFloat, 5.5) << std::endl;
	
	return 0;


}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林多

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值