我经常遇到以下情况:我有一个我希望访问的数据结构,如下所示:
class data {
public:
double error;
double value;
...
}
...
data *outputs;
...
double lastValue = ...;
double someValue = ...;
for (int i = 0; i < n; ++i) {
outputs[i] = someValue; //should be equivalent to outputs[i].value = someValue
outputs[i].error = lastValue - someValue;
}
目前我只使用outputs[i].value =
但是,出于可读性目的,使用(类似于)上述示例实际上更有意义(至少从理论的角度来看,代码不需要可维护性)。
我理解operator =适用于上述情况,但是对于简单访问,我仍然需要使用outputs [i] .value。对于概念设计的可读性而言,最好的解决方案是什么,也不会给程序员带来麻烦。
答案 0 :(得分:3)
您可以将赋值运算符重载添加到data
:
class data {
public:
double error, value;
void operator=(double d) { value = d; }
};
但是,说实话,我认为这会让人感到困惑。当然,这取决于你打算如何使用它,但是考虑到你的例子,我认为为类添加一个构造函数会更清晰:
class data {
public:
double error, value;
data(double value_arg, double error_arg)
: value(value_arg), error(error_arg) { }
};
用作:
outputs[i] = data(someValue, lastValue - someValue);