2011-01-28 13 views
8

¿Hay alguna manera de definir un tipo de molde, por ejemplo, una clase definida por el usuario a un tipo primitivo (int, corto, etc.)? Además, ¿algún mecanismo de este tipo requeriría un lanzamiento explícito o funcionaría de manera implícita?C++ Definición de un molde de tipo

por ejemplo:

// simplified example class 
class MyNumberClass 
{ 
private: 
    int value; 
public: 
    // allows for implicit type casting/promotion from int to MyNumberClass 
    MyNumberClass(const int &ampv) 
    { 
     value = v; 
    } 
}; 
// defined already above 
MyNumberClass t = 5; 

// What's the method definition required to overload this? 
int b = t; // implicit cast, b=5. 
// What's the method definition required to overload this? 
int c = (int) t; // C-style explicit cast, c=5. 
// ... etc. for other cast types such as dynamic_cast, const_cast, etc. 
+1

Keep en mente, las conversiones implícitas son, en la mayoría de los casos, una mala cosa. Sería mejor hacer una función 'get()' explícita o algo así. – GManNickG

+0

¿Por qué habría un problema con la conversión implícita? –

Respuesta

24

sí, se puede definir un operator type() para hacer la conversión, y sí, va a trabajar de forma implícita cuando se requiere tal conversión:

operator int() { 
    return value; 
} 
+0

¿Está permitido marcarlo como "explícito"? – KitsuneYMG

+1

@Kitsune: en C++ 0x, afortunadamente. – GManNickG

+6

Probablemente debería ser un método 'const'. – MSalters

Cuestiones relacionadas