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_t
是 char
或 wchar_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::string
和 std::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); }