Comment vérifier si un type de données est “défini” avec typedef
J'ai été confronté à ce problème aujourd'hui et je me demandais comment faire pour vérifier si un nouveau type défini avec typedef est vraiment défini quelque part. Pour donner un exemple, j'ai commencé à utiliser Xerces-c3 bibliothèque que j'ai construit à partir du code source et a écrit un xml2text convertisseur. Mais je ne pourrais pas trouver Xerces-c3 port sur fbsd installé de telle sorte Xerces-c2 bibliothèque.
Quand j'ai essayé de recompiler mon code source j'ai eu l'erreur suivante:
XML2Text.cc:83: error: cannot declare variable 'handler' to be of abstract type 'XML2TextHandlers'
XML2TextHandlers.h:32: note: because the following virtual functions are pure within 'XML2TextHandlers':
/usr/local/include/xercesc/framework/XMLFormatter.hpp:454: note: virtual void xercesc_2_7::XMLFormatTarget::writeChars(const XMLByte*, unsigned int, xercesc_2_7::XMLFormatter*)
Je suis en utilisant la définition suivante dans mon fichier d'en-tête pour writeChars méthode
virtual void writeChars(const XMLByte* const toWrite,
const XMLSize_t count,
XMLFormatter* const formatter );
J'ai vérifié que XMLSize_t n'est rien, mais unsigned int déclaré suivants:
#define XERCES_SIZE_T size_t
typedef XERCES_SIZE_T XMLSize_t;
Donc, si je veux faire un code compatible à la fois les bibliothèques comment vais-je le faire?
D'une façon que je peux penser à est de vérifier si la version de la bibliothèque et de définir XMLSize_t
en conséquence. D'une autre manière?
Merci,
Shripad
Vous devez vous connecter pour publier un commentaire.
Il n'y a aucun moyen de directement reconnaître si une définition de type est défini. Le plus populaire de la solution de contournement consiste à vérifier si le fichier qui définit la typedef également la définition d'une macro.
par exemple, Le type "struct tm" est définie dans le temps.h. Si vous regardez votre copie de temps.h, il y aura une macro définie dans la partie supérieure. Dans le VC2010 version "_INC_TIME" de sorte que vous pouvez écrire
Si le type vous intéresse définit une macro, alors vous pouvez vérifier qu'.
Pas sûr de savoir comment vous allez sur la vérification des typedefs, mais si theres une macro, vous pouvez vous identifier dans le fichier avec la définition de type, vous pouvez vérifier les instructions de définition avec #ifdef
http://gcc.gnu.org/onlinedocs/cpp/Ifdef.html