가 여기에 생각 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 * mystr = get_magic_string();
std::string mystrU8 = as_utf8(mystr);
이 모두에서 작동합니다
std::string as_utf8(const char* str) { return str; }
std::wstring as_wide(const wchar_t* str) { return str; }
지금 당신이 쓸 수 있습니다 : 그래서 우리는 pugi::char_t
에 변환 함수를 호출하기 위해 필요한 모든 당신이 당신의 헤더에 추가 할 수 있습니다 과부하이며, 컴파일러 설정으로 인해 과부하가 발생하고 pugi::char_t
이 이미 char
인 경우이 작업이 완전히 최적화됩니다 (인코딩이 이미 UTF-8이며 다른 8 비트 인코딩이 아닌 경우).
(당신은 또한 pugi::string_t
에 대해 같은 마법을 지원하기 위해 std::string
및 std::wstring
인수를 오버로드를 제공해야합니다.)
라이브러리 오염에 대해 걱정하는 경우, 자신의 래퍼를 쓰기 :
std::string my_utf8(const char * str) { return str; }
std::string my_utf8(const wchar_t * str) { return as_utf8(str); }
[documentation] (http://pugixml.googlecode.com/svn/tags/latest/docs/manual/dom.html#char_t)로 이동하면 'as_wide()'를 기본으로 사용하고, 그러나 나는 또한 overload'as_wide (wchar_t *)'는 아무것도하지 않으므로 어느 컴파일러 설정이라도 사용할 수 있습니다. –
as_wide() 함수를 어떻게 사용할 수 있습니까? – aliakbarian