我有一个安全类,其中包含一个预测数组 - 预测是一个只包含double的类。
我想允许更改双倍值,但仅允许正值,
并且在尝试读取双倍值时,如果该值未初始化(在我的代码中等于-1),则抛出异常。
我还有一个运算符double in
大致如此:
class Prediction{
double value;
public:
.....
Prediction::operator double() const {
return this->prediction;
}
Prediction::operator=(const double value){
...
//check value
}
}
class Security{
...
Prediction& Security::operator[](int index){
return predArray[index];
}
}
Prediction *predArray = new Prediction[4];
//default constructor set the value -1;
double a = predArray[0] //should throw an exception, because predArray[0] = -1
predArray[0] = 4; //should be O.K. because I want to change the value
predArray[1] = -4; //should throw exception, because trying to put negative value;
我该在哪里区分读写,因为在读和写时我会做不同的事情。
谢谢
reference_proxy
应该实现operator double()
而不是operator double&()
,否则有人可以这样做并绕过安全保护:s[0] = 4; double &d = s[0]; d = -4; // 直接更新 Prediction::d!
- Remy Lebeau