c++ - 如何转换pugi :char_t* to string?

标签 c++ pugixml

<分区>

Possible Duplicate:
How to convert pugi::char_t* to string

如何将 pugi:char_t* 类型转换为 wchar_t 字符串?

我想将 child_value() 的结果与某个 utf8 字符串进行比较,如果不进行这种转换,我将无法做到这一点。

for (pugi::xml_node_iterator it = words.begin(); it != words.end(); ++it)
    {
        wchar_t* wordValue = it->child("WORDVALUE").child_value();
    }

这个赋值返回错误,因为右边是 pugi::char_t* 而左边是 whar_t*

谢谢

最佳答案

这是一个想法。原始版本涉及修改库,这可能会在将来破坏内容,但让我们从这里开始:

我们已经有了这两个函数:

std::string as_utf8(const wchar_t* str);
std::wstring as_wide(const char* str);

我们还知道 pugi::char_tcharwchar_t。因此,为了在 pugi::char_t 上调用转换函数,我们只需要一个重载,您可以将其添加到 header 中:

std::string as_utf8(const char* str) { return str; }
std::wstring as_wide(const wchar_t* str) { return str; }

现在你可以这样写了:

pugi::char_t * mystr = get_magic_string();
std::string mystrU8 = as_utf8(mystr);

由于重载,这将在两种编译器设置中工作,如果 pugi::char_t 已经是 char,那么这将被完全优化(当然假设编码已经是 UTF-8,而不是任何其他 8 位编码!)。

(您还应该提供采用 std::stringstd::wstring 参数的重载,以支持 pugi::string_t.)


如果你担心污染库,写你自己的包装器:

std::string my_utf8(const char * str) { return str; }
std::string my_utf8(const wchar_t * str) { return as_utf8(str); }

关于c++ - 如何转换pugi :char_t* to string?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7140793/

相关文章:

c++ - 如何将 CMake 中的 QtMain 与 Qt5 链接?

c++ - iPhone OpenGL ES 不正确的 alpha 混合

pugixml - 使用 pugixml 保留空文本标签

c++ - 无法使用 node.value() 获取 pugixml 中 XML 元素的值

c++ - 是否有语法类似于 pugixml 的 MIT JSON 解析器?

c++ - [ ] - 运算符中的加法和增量表达式

c++ - MSVC 中的折叠表达式

c++ - 分配二维字符数组

c++ - Qt 未定义对 `pugi::xml_document::xml_document()` 的引用