Obtention du nom du type dans les modèles C
Dans la programmation de modèles C, l'obtention du nom du type en cours de conversion peut être cruciale pour la gestion des erreurs . Considérons une classe de modèle analysant des fichiers de données, où la plupart des erreurs d'analyse proviennent d'erreurs de fichiers de données. Pour fournir des messages d'erreur conviviaux, il est essentiel d'identifier le type de données attendu.
La fonction générique GetValue récupère les valeurs d'une carte de données en fonction des sections et des entrées clés. Lorsque la valeur attendue ne peut pas être convertie en type souhaité, une exception est levée. Cependant, déterminer le nom de type attendu à inclure dans le message d'erreur peut être difficile.
Solution au moment de la compilation
Une solution élégante au moment de la compilation peut être obtenue en utilisant le type introspection et macros prédéfinies. Créez un fichier d'en-tête (types.h) définissant un modèle de fonction GetTypeName.
template<typename T> const wchar_t *GetTypeName(); #define DEFINE_TYPE_NAME(type, name) \ template<>const wchar_t *GetTypeName<type>(){return name;}
Utilisez la macro DEFINE_TYPE_NAME dans les fichiers .cpp pour définir les noms de type pour les types rencontrés dans le processus d'analyse du fichier de données.
DEFINE_TYPE_NAME(int, L"int") DEFINE_TYPE_NAME(float, L"float") DEFINE_TYPE_NAME(std::string, L"std::string")
Au sein de la fonction GetValue, récupérez le nom du type en utilisant :
const wchar_t *typeName = GetTypeName<T>();
Cette approche garantit la création d'une erreur d'éditeur de liens si un type non défini est rencontré, incitant l'ajout de la définition de type nécessaire.
Solution alternative utilisant l'identification de type d'exécution (RTTI)
Une solution d'exécution peut être obtenue à l'aide de RTTI :
std::type_info(T).name()
Cependant, cette solution entraîne une surcharge d'exécution, ce qui la rend moins souhaitable pour les utilisateurs fréquemment appelés. fonctions.
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!