Dato il seguente programma:ambiguo string :: operator = chiamata per il tipo con la conversione implicita a int e la stringa
#include <iostream>
#include <string>
using namespace std;
struct GenericType{
operator string(){
return "Hello World";
}
operator int(){
return 111;
}
operator double(){
return 123.4;
}
};
int main(){
int i = GenericType();
string s = GenericType();
double d = GenericType();
cout << i << s << d << endl;
i = GenericType();
s = GenericType(); //This is the troublesome line
d = GenericType();
cout << i << s << d << endl;
}
Compila il Visual Studio 11, ma non clang o gcc. E sta avendo difficoltà perché vuole convertire in modo implicito da un GenericType
a un int
ad un char
ma potrebbe anche restituire un string
e quindi v'è un'ambiguità (operator=(char)
e operator=(string)
sia partita GenericType
).
Tuttavia, il costruttore di copie funziona correttamente.
La mia domanda è: come posso risolvere questa ambiguità senza modificare il contenuto di main? Cosa devo fare per modificare GenericType
per gestire questa situazione?
Le conversioni implicite sono una buona fonte di problemi. Riconsiderare se vuoi davvero questo ... –
lo faccio. Sono principalmente interessato a questo per curiosità a questo punto. – M2tM
Si può anche usare l'operatore esplicito int() 'etc in C++ 11. Ciò impedisce gli errori tanto quanto l'uso della funzione 'getType()', poiché l'utente deve eseguire esplicitamente il cast. – chris