Использование pugixml в режиме wchar_t и в обычном режиме в одном проекте

У меня есть проект со многими файлами .cpp. В некоторых из этих файлов мне нужно использовать pugixml в режиме wchar_t, а некоторые из них уже реализованы с использованием char и pugixml в обычном режиме.
Я знаю, что должен использовать определение

#define PUGIXML_WCHAR_MODE

Когда я пытаюсь сделать это в файлах, которые используют режим wchar_t:

#define PUGIXML_WCHAR_MODE
*some code*
#undef

это дает мне ссылки ошибок. Что я делаю не так?

0

Решение

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"

Это должно быть так.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]