Question

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

how can I convert pugi:char_t* type to wchar_t string?

I want to compare the result of child_value() to some utf8 string and without that convertion I cant do that.

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

this assignment return error because the right side is pugi::char_t* and the left side is whar_t*

thanks

Was it helpful?

Solution

Here's an idea. The crude version involves modifying the library, which may break stuff in the future, but let's begin with that:

We already have these two functions:

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

We also know that pugi::char_t is either char or wchar_t. So all we need in order to call the conversion function on pugi::char_t is an overload, which you may add to your headers:

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

Now you can write this:

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

This will work in both compiler settings thanks to the overload, and if pugi::char_t is already char, then this will be optimized out entirely (assuming of course that the encoding was already UTF-8, and not any other 8-bit encoding!).

(You should also provide the overloads that take std::string and std::wstring arguments to support the same magic for pugi::string_t.)


If you worry about polluting the library, write your own wrapper:

std::string my_utf8(const char * str) { return str; }
std::string my_utf8(const wchar_t * str) { return as_utf8(str); }
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top