2010-12-02 48 views
0

Vous pouvez obtenir le nom de classe actuel, en supposant que RTTI est activé, en utilisant typeid (this) .name() à l'exécution.Existe-t-il un moyen d'obtenir un nom de classe de base en C++ lors de l'exécution?

Je voudrais être en mesure d'obtenir le nom de la classe de base pour "this". Est-ce possible? Je n'utilise pas l'héritage multiple, au cas où cela ferait une différence.

+0

Pourquoi avez-vous besoin de ça? Habituellement, lorsque vous avez besoin de RTTI, c'est un signe d'un problème de conception. – Dima

+0

La raison pour laquelle je voulais cela était de fournir une sortie de débogage en utilisant un appel existant dans le cadre d'un système hérité. Le nom de classe et le nom de classe de base sont disponibles dans le code, mais il y a environ 300 classes impliquées, donc je cherchais quelque chose que je pourrais utiliser dans une recherche globale et remplacer. Ceci est pour une demande du client; J'aurais résolu ce problème d'une manière complètement différente, mais les contraintes de compatibilité binaire avec les logiciels hérités empêchent ma solution. –

Répondre

1

Non monsieur. Pardon. Et votre méthode pour obtenir le nom de classe de cette manière dépend de l'implémentation. Sur ma mise en œuvre, je reçois le nom mutilé.

0

Non, ce n'est pas, et la raison pour laquelle vous avez besoin de cette fonctionnalité est douteux :)

+0

allez, il peut y avoir des cas d'utilisation obscurs pour ce que l'OP veut atteindre. –

+0

La raison pour laquelle je voulais cela était de fournir une sortie de débogage en utilisant un appel existant dans le cadre d'un système hérité. Le nom de classe et le nom de classe de base sont disponibles dans le code, mais il y a environ 300 classes impliquées, donc je cherchais quelque chose que je pourrais utiliser dans une recherche globale et remplacer. –

2

De plus, je ne pense pas que vous pouvez compter sur typeid(this).name() pour vous donner un nom de classe (AFAIK la valeur exacte de être retourné est défini par l'implémentation).

1

Les informations ne peuvent pas être récupérées de manière fiable car elles ne sont stockées de manière fiable nulle part, car la philosophie C++ est de ne pas vous donner de choses à moins que vous ne les demandiez explicitement.