C++ 빌더 10.1 (Clang 3.3)과 함께 새로운 C++ 11 Win32/64 프로젝트를 계획 중이고 핵심 기능에 관해서는 가장 휴대하기 쉬운 방식으로 구현할 생각입니다. std::string
인코딩을위한 UTF-8 (또한 SQLiteCpp의 기본 인코딩이기 때문에 사용하려는 SQLite C++ 래퍼). 는 I가 <codecvt>
에서 .to_bytes()
및 .from_bytes()
기능을 사용하기로 결정 윈 - API 's 및 <locale>
의 std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>>
와의 상호 작용을위한std :: wstring_convert를 넣을 곳 <std :: codecvt_utf8 <wchar_t>>?
.
이제, 변환기 개체를 배치하는 가장 좋은 방법은 무엇인지 알고 싶습니다.
고유 한 단위 및 네임 스페이스를 지정해야합니다.
...
#include <codecvt>
#include <locale>
namespace cnv
{
extern std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> wcu8;
}
...
통화 당 :
.H
...
namespace cnv
{
std::wstring_convert<std::codecvt_utf8<wchar_t>> wcu8;
}
...
하고는 모든 곳에서 필요 cnv::wcu8.to_bytes(xyz)
를 사용하여 포함되어 있습니까?
아니면 인코딩간에 변환해야하는 각 함수 구현 내에서 인스턴스를 만드는 것이 더 낫습니까?
유일한 의도가 WIn32/64 인 경우 왜 휴대용이 필요합니까? 그렇다면 변환을 잊어 버리고 wstring 만 사용하면됩니다. – Brandon
지금 Windows * 용 *이며 다른 시스템 용으로 나중에 컴파일 될 수 있습니다. – FlKo
'std :: wstring_convert'에 대한 저의 경험은 GCC와 clang이 잘 지원하지 않는다는 것입니다. 특히 Travis CI의 기본 컴파일러는'codecvt' 헤더를 포함하여 질식합니다. 그냥 내 두 센트. – rwols