web-dev-qa-db-fra.com

Récupération d'un nom de classe c ++ par programme

Je me demandais s'il était possible en C++ de récupérer le nom d'une classe sous forme de chaîne sans avoir à le coder en dur dans une variable ou un getter. Je suis conscient qu'aucune de ces informations n'est réellement utilisée au moment de l'exécution, donc elle n'est pas disponible, mais existe-t-il des macros qui peuvent être créées pour créer cette fonctionnalité?

Edit: peut être utile de noter que j'essaie en fait de récupérer le nom d'une classe dérivée et que j'utilise Visual C++ 2008 Express Edition.

54
Morgan

Vous pouvez utiliser typeid:

#include <typeinfo>
cout << typeid(obj).name() << endl;

Cependant, cela est déconseillé car le format n'est pas normalisé et peut différer entre différents compilateurs (ou même différentes versions du même compilateur).

88
Konrad Rudolph

Si vous voulez juste vérifier si c'est une certaine classe, alors

typeid(obj) == typeid(CSubClass)

fonctionnera toujours quelles que soient les implémentations.

Sinon, un moyen pratique consiste à déclarer:

virtual const char* classname() { return "CMyClass";}

et implémenter par sous-classe.

35
fchen

La chose typeid(obj).name() donne toujours le type de la variable telle qu'elle a été déclarée, pas le type (classe) réel de l'objet. Si la variable obj est affectée à une instance d'une sous-classe de la classe sous laquelle obj a été déclaré, typeid ne le révèle malheureusement pas.

10
jbillfinger