Existe-t-il une macro __CLASS__
en C ++ qui donne un nom de classe similaire à __FUNCTION__
macro qui donne le nom de la fonction
Réponses
Trop de publicités?Le problème avec l'aide d' typeid(*this).name()
c'est qu'il n'y a pas d' this
pointeur dans une méthode statique d'appel. La macro __PRETTY_FUNCTION__
des rapports d'un nom de classe dans des fonctions statiques ainsi que les appels de méthode. Toutefois, cela ne fonctionne qu'avec gcc.
Voici un exemple de l'extraction de l'information par le biais d'une macro style de l'interface.
inline std::string methodName(const std::string& prettyFunction)
{
size_t colons = prettyFunction.find("::");
size_t begin = prettyFunction.substr(0,colons).rfind(" ") + 1;
size_t end = prettyFunction.rfind("(") - begin;
return prettyFunction.substr(begin,end) + "()";
}
#define __METHOD_NAME__ methodName(__PRETTY_FUNCTION__)
La macro __METHOD_NAME__
renverra une chaîne de la forme <class>::<method>()
, de découper le type de retour, les modificateurs et les arguments de ce qu' __PRETTY_FUNCTION__
vous donne.
Pour quelque chose qui extrait juste le nom de la classe, certaines précautions doivent être prises au piège de situations où il n'existe pas de classe:
inline std::string className(const std::string& prettyFunction)
{
size_t colons = prettyFunction.find("::");
if (colons == std::string::npos)
return "::";
size_t begin = prettyFunction.substr(0,colons).rfind(" ") + 1;
size_t end = colons - begin;
return prettyFunction.substr(begin,end);
}
#define __CLASS_NAME__ className(__PRETTY_FUNCTION__)