2011-02-23 4 views
7

Comment puis-je obtenir g ++ pour effectuer des vérifications de type sur typedefs? C'est possible? à savoirtypedef vérification de type?

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? 

Je ne peux pas utiliser C++ 0x caractéristiques (je ne sais pas s'ils peuvent le faire.)

EDIT: Ce que je veux quelque chose comme ceci:

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 

Est-ce trop demander?

+0

Je suis presque c'est un dup, mais je ne peux pas trouver l'original. –

+0

Aucun 'typedef', malgré son nom, ne définit pas un nouveau type, il crée juste un alias pour un type existant. – sbi

Répondre

8
+0

+1 pour signaler une bibliothèque Boost utile que je ne connaissais pas encore –

+0

Merci, je ne peux pas utiliser boost lui-même en raison de contraintes, mais je vais copier-coller le fichier dans mon code. typedef' semble juste stupide à moi maintenant. Il n'est pas utile d'exprimer une idée sur un type, n'est-ce pas? – nakiya

+0

@nakiya Souvent, vous voulez simplement créer un nouveau nom pour un type. Par exemple des instances spécifiques de conteneurs standard, mais vous n'avez pas besoin de créer un nouveau type entier car le nom de 'typedef' est strictement pour la commodité et la maintenabilité. –

1

Tant que T1 et T2 sont des typedefs du même type, vous ne recevrez aucun avertissement!

+0

Mais c'est juste inutile. :( – nakiya

+1

Non, vous n'obtiendrez pas un avertissement! Au moins mon g ++ n'a pas .. – karlphillip

+0

@karlphillip: Voir ce sujet: [Attention: débordement dans la conversion constante implicite] (http://stackoverflow.com/questions/5095434/warning-overflow-in-implicit-constant-conversion) – Nawaz

2

Pour élargir la réponse de Nawaz: lorsque vous typedef A B, puis B est juste un alias pour A, pas un type distinct. x et y sont simplement int dans votre exemple. Si vous voulez créer un nouveau type, utilisez un struct à un seul membre.