我有一个包含许多 .cpp 文件的项目。在其中一些文件中,我需要在 wchar_t 模式下使用 pugixml,其中一些已经在通常模式下使用 char 和 pugixml 实现。 我知道我必须使用定义
#define PUGIXML_WCHAR_MODE
当我尝试在使用 wchar_t 模式的文件中这样做时:
#define PUGIXML_WCHAR_MODE
*some code*
#undef
它给我链接错误。我做错了什么?
最佳答案
pugixml 并非设计为以这种方式工作。理想情况下,您可以尝试更改代码以使用一种编译标志组合(执行 UTF-8 <-> wchar_t 转换的函数,pugi::as_utf8 和 pugi::as_wide,可能会有所帮助)。
有一种不受支持的方法应该可以工作,但不是特别漂亮 - 您可以为 wchar 配置重命名 pugi 命名空间。
为此,您必须创建一个特殊的 header ,即 pugixmlw.hpp,您将在宽字符配置中包含该 header ;这个header内容应该大致如下:
#ifndef HEADER_PUGIXMLW_HPP
#define HEADER_PUGIXMLW_HPP
#define PUGIXML_WCHAR_MODE
#define pugi pugiw
#undef HEADER_PUGIXML_HPP
#undef HEADER_PUGICONFIG_HPP
#undef SOURCE_PUGIXML_CPP
#undef PUGIXML_TEXT
#undef PUGIXML_CHAR
#include "pugixml.hpp"
#undef PUGIXML_TEXT
#undef PUGIXML_CHAR
#undef HEADER_PUGIXML_HPP
#undef HEADER_PUGICONFIG_HPP
#undef SOURCE_PUGIXML_CPP
#undef pugi
#undef PUGIXML_WCHAR_MODE
#endif
如果您使用的是仅 header 的 pugixml 变体,那应该是它;如果您正在编译 pugixml.cpp,则必须添加一个额外的源文件 pugixmlw.cpp,其内容如下:
#define PUGIXML_WCHAR_MODE
#define pugi pugiw
#include "pugixml.cpp"
应该是这样吧。
关于c++ - 在一个项目中以 wchar_t 模式和普通模式使用 pugixml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14329075/