Okay, quindi ho una classe che ha una "digitazione debole" I.E. è in grado di memorizzare molti tipi differenti definiti come:C++: Operatore di overloading =
#include <string>
class myObject{
public:
bool isString;
std::string strVal;
bool isNumber;
double numVal;
bool isBoolean;
bool boolVal;
double operator= (const myObject &);
};
vorrei sovraccaricare l'operatore di assegnazione in questo modo:
double myObject::operator= (const myObject &right){
if(right.isNumber){
return right.numVal;
}else{
// Arbitrary Throw.
throw 5;
}
}
In modo che io possa fare questo:
int main(){
myObject obj;
obj.isNumber = true;
obj.numVal = 17.5;
//This is what I would like to do
double number = obj;
}
Ma quando Lo faccio, ottengo:
error: cannot convert ‘myObject’ to ‘double’ in initialization
Al compito.
Ho anche provato:
int main(){
myObject obj;
obj.isNumber = true;
obj.numVal = 17.5;
//This is what I would like to do
double number;
number = obj;
}
Al che ottengo:
error: cannot convert ‘myObject’ to ‘double’ in assignment
C'è qualcosa che mi manca? o semplicemente non è possibile fare una conversione del genere sovraccaricando operator=
.
IMO, "tipizzazione debole" è generalmente un problema con cui lavorare in C++, ma forse dovresti dare un'occhiata a boost :: any e boost :: variant perché le ruote migliori sono già state inventate. – UncleBens
Sembra molto simile alla definizione di un 'unione' in linguaggio C. Funziona anche contro OOP eseguendo un test basato sul tipo di un oggetto. –