算术类型代理

时间:2016-08-21 12:38:21

标签: c++ proxy-pattern

背景

我正在使用C ++ 11 JSON映射类来引入语法直观且安全的对象,这些对象可以将自身序列化/反序列化为JSON表示。

问题

我需要为算术类型提供一个好的代理(主要用于intunsignedfloatdouble)。怎么实现这样的事情?第一个想法是实现模板类重载所有算术,按位和比较运算符。但是为了避免不必要的工作,我应该写什么超载?怎么样的演员呢?什么应该是operator+的返回类型?

简单的不完整实现显示了这个想法:

template <typename T>
class Proxy {
    T mValue;
public:
    Proxy(T value = T()) : mValue(value){}

    //Should it be defined like this...
    Proxy &operator+=(T value) {
        mValue += value;
        return *this;
    }

     //Or maybe like this...
    template <typename U>
    Proxy &operator+=(U &&value) {
        mValue += std::forward<U>(value);
        return *this;
    }

    //Should this return T or Proxy<T>?
    T operator+(T value) {
        return mValue + value;
    }


    //Is it necessary?
    operator T() const {
        return mValue;
    }

    //...
};

替代

但是我应该将原始JSON字段实现为代理类吗?也许有更好的方法。例如,我也考虑将内部值公之于众,而不是写:

json.intField += 4;

用户必须写

json.intField.value += 4;

这种语法并不像我希望的那样具有启发性和清晰度,但这也是一种选择。

每个人都告诉我如何在C ++中实现JSON - 这不是我的问题!代理模式有更广泛的用途!

0 个答案:

没有答案