我在 C++ 中有一个对象。
它的一些函数对对象没有任何改变并且被限定为 being const
。
其他函数确实对对象进行了更改,这将导致重新计算几个值。
我的问题是 C++ 或 C++11 中是否存在一些特殊的类方法,如果使用非常量方法,则会自动调用这些方法。
如果不是,为什么会这样?
简短的回答是不,该语言没有任何东西可以直接支持它。
您仍然可以至少做一点集中代码来跟踪您的参数是否已更改。例如,您可以编写一个小模板,如下所示:
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;
}
};
这不会使整个过程自动化,但可以让您隔离代码,因此只有使用参数的函数需要跟踪它们是否是最新的——其余代码可以只分配值,以及何时分配这些值被自动标记为脏。