gpt4 book ai didi

c++ - 如何使用 typedef 检查数据类型是否为 "defined"

转载 作者:IT老高 更新时间:2023-10-28 22:14:58 32 4
gpt4 key购买 nike

我今天遇到了这个问题,只是想知道如何检查用 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 只是 unsigned int 声明如下:

#define XERCES_SIZE_T size_t  
typedef XERCES_SIZE_T XMLSize_t;

所以,如果我想让代码与这两个库都兼容,我该怎么做?我能想到的一种方法是检查库的版本并相应地定义 XMLSize_t 。还有什么办法吗?

谢谢,

虾皮

最佳答案

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

例如“struct tm”类型在 time.h 中定义。如果您查看 time.h 的拷贝,则会在顶部定义一个宏。 VC2010版本是“_INC_TIME”所以可以写

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

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

关于c++ - 如何使用 typedef 检查数据类型是否为 "defined",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3517174/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com