我在C ++中有一个对象。
它的一些功能不会对对象进行任何更改,并且被认定为const
。
其他函数会对对象进行更改,这会导致重新计算多个值。
我的问题是,在C ++或C ++ 11中是否存在一些特殊的类方法,如果使用非const方法,它将自动调用。
如果没有,为什么会这样?
答案 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;
}
};
这不会使整个过程自动化,但可以让您隔离代码,因此只有使用参数的函数需要跟踪它们是否是最新的 - 其余的代码只能分配值,当它们执行时,值会自动标记为脏。