Maison >développement back-end >C++ >Existe-t-il une macro __CLASS__ pour l'extraction du nom de classe en C ?

Existe-t-il une macro __CLASS__ pour l'extraction du nom de classe en C ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-08 08:08:02552parcourir

Is There a __CLASS__ Macro for Class Name Extraction in C  ?

La recherche de __CLASS__ : une macro pour l'extraction de nom de classe

C fournit la macro FUNCTION pour récupérer le nom de la fonction en cours d'exécution. De même, les développeurs se demandent souvent s'il existe une macro équivalente pour obtenir le nom de classe, semblable à __CLASS__.

La réponse réside dans l'exploration d'alternatives grâce à la conception du langage C. Voici quelques options viables :

  1. typeid(*this).name() : Cette expression renvoie le nom de classe complet à l'aide de l'opérateur typeid et du pointeur this.
  2. PRETTY_FUNCTION : disponible avec gcc, cette macro fournit le nom complet de la méthode ou de la fonction statique, y compris le nom de la classe.
  3. Personnalisé Macros : Les développeurs peuvent définir des macros personnalisées pour extraire les informations souhaitées. Par exemple :

    • Pour l'extraction du nom de méthode :

      #define __METHOD_NAME__ methodName(__PRETTY_FUNCTION__)
      
      inline std::string methodName(const std::string& prettyFunction) {
          // Extract the method name from __PRETTY_FUNCTION__
          ...
      }
    • Pour l'extraction du nom de classe :

      #define __CLASS_NAME__ className(__PRETTY_FUNCTION__)
      
      inline std::string className(const std::string& prettyFunction) {
          // Extract the class name from __PRETTY_FUNCTION__
          ...
      }

Ces macros personnalisées émulent les fonctionnalités de CLASS mais nécessitent une attention particulière pour gérer des cas particuliers, tels que des méthodes ou des fonctions globales sans contexte de classe.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn