2008-10-29 7 views
13

Existe-t-il un moyen (standardisé) d'obtenir le nom de la méthode actuelle en utilisant C++? En utilisant GNU GCC, vous pouvez le faire en utilisant la macro __FUNCTION__ et __PRETTY_FUNCTION__ (entourée de 2 caractères de soulignement), cependant, ceci n'est bien sûr pas portable. Existe-t-il un moyen de le faire en C++ standard ou un moyen de le rendre portable?Obtention du nom de la méthode actuelle en C++

+0

vous pouvez échapper aux underscores en utilisant des barres obliques inverses pour éviter les démarques chambouler ... – Roddy

+0

Ou en cliquant sur le bouton « code » dans l'éditeur, ce que j'ai fait quand je l'ai édité. –

+0

J'utilise ['BOOST_CURRENT_FUNCTION'] (http://www.boost.org/doc/libs/1_36_0/libs/utility/current_function.html) – fizzer

Répondre

26

L'identificateur __func__ fait partie de la norme C99 et se trouve dans le brouillon C++ 0x.

L'identificateur __func__ est implicitement déclarée par le compilateur que si les conditions suivantes étaient au début de chaque corps de la fonction:

static const char __func__[] = "function-name"; 

function-name est une chaîne de caractères définie par l'implémentation fournie automatiquement par le compilateur. Jusqu'à ce que la prise en charge de ces normes soit disponible (ou plus largement disponible), vous êtes confronté à des impairs spécifiques au compilateur.

0

Non, il n'est pas pris en charge par la norme C++.

0

Cela s'appelle "introspection" et il n'y a rien de tel dans les normes C++. Vous devriez utiliser une bibliothèque externe (boost je pense que ça le supporte d'une façon ou d'une autre). Mais essayez de comprendre si la raison de l'utiliser est vraiment bonne.

+1

Dans d'autres langues, il est utile de générer des tests unitaires –

Questions connexes