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

时间:2011-08-21 20:06:13

标签: c++ pugixml

  

可能重复:
  How to convert pugi::char_t* to string

如何将pugi:char_t * type转换为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 *

感谢

1 个答案:

答案 0 :(得分:0)

这是一个想法。原始版本涉及修改库,这可能会破坏未来的东西,但让我们从那开始:

我们已经有了这两个功能:

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

我们也知道pugi::char_tcharwchar_t。因此,我们在pugi::char_t上调用转换函数所需要的只是一个重载,您可以将其添加到标题中:

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); }