У меня есть проект со многими файлами .cpp. В некоторых из этих файлов мне нужно использовать pugixml в режиме wchar_t, а некоторые из них уже реализованы с использованием 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, может помочь).
Существует неподдерживаемый способ, который должен работать, но он не особенно хорош — вы можете переименовать пространство имен pugi для конфигурации wchar.
Чтобы сделать это, вам нужно создать специальный заголовок, то есть pugixmlw.hpp, который вы включите для конфигурации с широким символом; содержимое этого заголовка должно быть примерно следующим:
#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
Если вы используете вариант pugixml только для заголовков, это должно быть так; если вы компилируете pugixml.cpp, вам нужно будет добавить дополнительный исходный файл pugixmlw.cpp со следующим содержимым:
#define PUGIXML_WCHAR_MODE
#define pugi pugiw
#include "pugixml.cpp"
Это должно быть так.
Других решений пока нет …