对象可能修改的功能

时间:2013-02-15 23:24:07

标签: c++ oop class c++11

我在C ++中有一个对象。

它的一些功能不会对对象进行任何更改,并且被认定为const

其他函数会对对象进行更改,这会导致重新计算多个值。

我的问题是,在C ++或C ++ 11中是否存在一些特殊的类方法,如果使用非const方法,它将自动调用。

如果没有,为什么会这样?

1 个答案:

答案 0 :(得分:2)

简短的回答是,不,语言没有任何东西可以直接支持它。

您仍然可以至少执行一些操作来集中代码,以跟踪您的参数是否已更改。例如,您可以编写一个小模板,如下所示:

template <class T>
class param {
    T value_;
    bool clean_;
public:
    param(T v) : value_(v), clean_(false) {}

    param &operator=(param &other) { value_ = other.value; clean_ = false; return *this; }

    param &operator=(T const &t) { value_ = t; clean_ = false; return *this; }

    operator T() { return value_; }    

    void clean() { clean_ = true; }

    bool isclean() { return clean_; }
};

然后你会有类似的东西:

class integrator { 
    double value;
    param<double> a, b, c;

    double calculate_value(double a, double b, double c);

public:
    double operator()() { 
        if (a.isclean() && b.isclean() && c.isclean())
            return value;
        value = calculate_value(a, b, c);
        a.clean();
        b.clean();
        c.clean();
        return value;
    }
};

这不会使整个过程自动化,但可以让您隔离代码,因此只有使用参数的函数需要跟踪它们是否是最新的 - 其余的代码只能分配值,当它们执行时,值会自动标记为脏。