C++ 如何检查数据类型是否为;定义为;使用typedef

C++ 如何检查数据类型是否为;定义为;使用typedef,c++,typedef,C++,Typedef,我今天遇到了这个问题,只是想知道如何检查用typedef定义的新类型是否真的在某个地方定义了。举个例子,我开始使用Xerces-c3库,该库是我根据源代码构建的,并编写了一个xml2text转换器。但我在fbsd上找不到Xerces-c3端口,所以安装了Xerces-c2库 当我试图重新编译我的源代码时,我得到了以下错误: XML2Text.cc:83: error: cannot declare variable 'handler' to be of abstract type 'XML2Te

我今天遇到了这个问题,只是想知道如何检查用typedef定义的新类型是否真的在某个地方定义了。举个例子,我开始使用Xerces-c3库,该库是我根据源代码构建的,并编写了一个xml2text转换器。但我在fbsd上找不到Xerces-c3端口,所以安装了Xerces-c2库

当我试图重新编译我的源代码时,我得到了以下错误:

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*)
我在头文件中为writeChars方法使用以下定义

virtual void writeChars(const XMLByte* const toWrite,
                        const XMLSize_t count,
                        XMLFormatter* const formatter );
我检查了XMLSize_t只不过是用以下语句声明的无符号int:

#define XERCES_SIZE_T size_t  
typedef XERCES_SIZE_T XMLSize_t;
因此,如果我想使代码与这两个库兼容,我将如何做? 我能想到的一种方法是检查库的版本是否正确,并相应地定义
XMLSize\u t
。还有别的办法吗

谢谢


Shripad

不确定如何检查typedef,但如果文件中有一个宏可以用typedef标识,则可以用#ifdef检查define语句


无法直接识别是否定义了typedef。最常用的解决方法是检查定义typedef的文件是否也定义了宏

e、 g.“struct tm”类型在time.h中定义。如果查看time.h的副本,将在顶部定义一个宏。在VC2010版本中,它是“\u INC\u TIME”,因此您可以编写

#if !defined(_INC_TIME)
    // Do whatever
#endif

如果您感兴趣的类型定义了一个宏,那么您可以检查它。

是的,我知道它是否是用宏定义的,我可以很容易地执行以下操作35; ifndef XMLSize#define XMLSize#t unsigned int#endifYup,通过执行以下操作解决了此问题:我发现Xerces_autoconf_config.hpp中声明了此类型,Xerces-c3中引入了该类型,但Xerces-c2中没有该类型。以下内容也是如此:#ifndef XERCES_AUTOCONFIG_CONFIG_HPP#define XMLSize_t unsigned int#endif