2011-02-23 9 views
7

¿Cómo obtengo g ++ para hacer comprobaciones de tipo en typedefs? ¿Es posible? es decirtypedef type checking?

typedef int T1; 
typedef int T2; 

T1 x = 5;  //Ok with me 
T2 y = x;  //Any way to get an error or a warning here? 

no puedo usar C++ 0x características (no sé si se puede hacer esto.)

EDIT: Lo que quiero es algo como esto:

typedef int BallID; 
typedef int BatID; 

BatID x = 10; 
map<BatID, Bat*> m; 
m.insert(make_pair(x, bigbat));  //OK 
BallID y = 15; 
m.insert(make_pair(y, smallbat));  //Give me a warning at least plz 

¿Es esto demasiado pedir?

+0

Estoy casi seguro de que este es un DUP, pero no puedo encontrar el original. –

+0

No 'typedef', a pesar de su nombre, no define un nuevo tipo, simplemente crea un alias para un tipo existente. – sbi

Respuesta

8
+0

+1 para señalar una útil biblioteca de Boost que todavía no conozco. –

+0

Gracias. No puedo utilizar el impulso en sí mismo debido a las limitaciones, pero copiaré y pegaré el archivo en mi código. Pero ' typedef' simplemente parece estúpido para mí ahora No es útil expresar una idea sobre un tipo ¿verdad? – nakiya

+0

@nakiya A menudo solo quieres crear un nuevo nombre para un tipo. Por ejemplo, instancias específicas de contenedores estándar, pero no es necesario crear un tipo completo nuevo ya que el nombre 'typedef' es estrictamente para su comodidad y facilidad de mantenimiento. –

1

Mientras T1 y T2 sean typedefs del mismo tipo, ¡no recibirá ninguna advertencia!

+0

Pero eso es inútil. :( – nakiya

+1

No, no recibirá una advertencia! Al menos mi g ++ no lo hizo. – karlphillip

+0

@karlphillip: Consulte este tema: [Advertencia: desbordamiento en la conversión constante implícita] (http://stackoverflow.com/questions/5095434/warning-overflow-in-implicit-constant-conversion) – Nawaz

2

de ampliar la respuesta de Nawaz: cuando typedef A B, entonces B es sólo un alias para A, no un tipo separado. x y y son solo int en su ejemplo.

Si desea crear un tipo nuevo, use un miembro struct.