好吧,我有一个弱类型的类I.E.它可以存储定义为许多不同的类型:C++:重载操作符=
#include <string>
class myObject{
public:
bool isString;
std::string strVal;
bool isNumber;
double numVal;
bool isBoolean;
bool boolVal;
double operator= (const myObject &);
};
我想重载赋值运算符是这样的:
double myObject::operator= (const myObject &right){
if(right.isNumber){
return right.numVal;
}else{
// Arbitrary Throw.
throw 5;
}
}
所以,我可以做到这一点:
int main(){
myObject obj;
obj.isNumber = true;
obj.numVal = 17.5;
//This is what I would like to do
double number = obj;
}
但是,当我这样做,我得到:
error: cannot convert ‘myObject’ to ‘double’ in initialization
在任务中。
我也曾尝试:
int main(){
myObject obj;
obj.isNumber = true;
obj.numVal = 17.5;
//This is what I would like to do
double number;
number = obj;
}
对此我得到:
error: cannot convert ‘myObject’ to ‘double’ in assignment
有什么我失踪?或者是不可能通过重载operator=
来做这样的转换。
IMO,“弱打字”通常是在C++中使用的一种痛苦,但也许你应该考虑boost :: any和boost :: variant,因为更好的轮子已经被发明出来。 – UncleBens 2010-01-15 23:05:10
这看起来很像C语言union的定义。它也可以通过基于对象的类型执行测试来抵御OOP。 – 2010-01-16 00:57:31