2013-08-30 14 views
6

Dla jasności Niech moja nowa klasa będzie:C++ - Konwersja z niestandardowych klas wbudowanemu w rodzaju

powiedzmy chcę, aby móc określić:

MyInt Three(30); 
int thirty = Three; 

ale w Aby uzyskać ten wynik, piszę:

MyInt Three(30); 
int thirty = Three + 0; 

Jak mogę uzyskać automatyczną konwersję z mojej klasy niestandardowej do typu wbudowanego?

+2

Uwaga: to zwykle _bad idea_ mieć _both_ konwersje _implicit_ (tutaj 'int'->' MyInt' poprzez zakaz wyraźną konstruktora _i_ 'MyInt'-> 'int' za pośrednictwem operatora konwersji). (Rozważmy na przykład 'std :: string', dla którego istnieje niejawna konwersja _from_' const char * '(konwertujący konstruktor), ale nie _to_' const char * '(w tym celu musisz wywołać' .c_str() 'lub powiązane funkcje członkowskie). [Także, literówka: 'prywatny' ->' prywatny: '] –

Odpowiedz

14

z funkcją konwersji typu:

class MyInt{ 
    public: 
     MyInt(int x){theInt = x /10;} 
     int operator+(int x){return 10 * theInt + x;} 

     operator int() const { return theInt; } // <-- 

    private 
     int theInt; 
}; 
+0

Po prostu wypróbowany clang ++, to działa! –

+4

Z dodaną uwagą, że robienie tego powinno być przezroczyste. Oznacza to, że jeśli konwertujesz na 'int', klasa powinna być klasą numeryczną, a nie klasą niestandardową, która robi coś zupełnie niezwiązanego. –

+3

Powinien to być 'const' (ale' operator + 'również, jeśli nie jest funkcją nie będącą członkiem) i powinien prawdopodobnie zwrócić' 10 * theInt' zgodnie z dziwnością OP. –

Powiązane problemy