0

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

它的一些函数对对象没有任何改变并且被限定为 being const

其他函数确实对对象进行了更改,这将导致重新计算几个值。

我的问题是 C++ 或 C++11 中是否存在一些特殊的类方法,如果使用非常量方法,则会自动调用这些方法。

如果不是,为什么会这样?

4

1 回答 1

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;
    }
};

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

于 2013-02-15T23:53:37.680 回答