您的位置:首页 > 编程语言 > C语言/C++

c++ Policy-based design

2017-02-10 17:29 381 查看
基于Policy和基于traits都是一样的,只是感觉Policy倾向于行为提取,traits倾向于类型提取。好像还有一种名词:Aspect-oriented programming,不过感觉都有相同的意义。

举个实例:计算加减乘除,常规方法是定义一个抽像计算的基类,然后派生出各种具体计算类…就不多说了。

下面使用Policy方法,实现一把:

#include<iostream>
template<typename T>
class Add
{
public:
typedef T valueType;
static T calc(const T& a, const T& b)
{
return a + b;
}
};

template<typename T>
class Sub
{
public:
typedef T valueType;
static T calc(const T& a, const T& b)
{
return a - b;
}
};

//此处略了 乘/除,方式大致同上
//

template<typename OP>
class Calculator :protected OP
{
typedef typename OP::valueType valueType;
valueType a_;
valueType b_;
public:
explicit Calculator(valueType a, valueType b)
:a_(a), b_(b)
{}

valueType getResult()
{
return OP::calc(a_, b_);
}
};

int main()
{
Calculator<Add<int>> Calc(1, 2);
std::cout << Calc.getResult() << std::endl;

Calculator<Sub<float>> Calc2(3.9, 1.4);
std::cout << Calc2.getResult() << std::endl;

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ Policy template