문제

UTF8, UTF16, UTF32 및 WCHAR_T (OS에 따라 UTF32 또는 UTF16 일 수 있음)를 포함한 다양한 인코딩에서 문자열을 가져올 수있는 API를 구입하고 있습니다.

  1. 새로운 C ++ 표준이 새로운 유형을 도입했습니다 char16_t 그리고 char32_t 이는 이러한 모호한 규모가 없으며 향후 사용해야하므로 지원하고 싶습니다. 그러나 문제는입니다. 그들이 방해할까요? 정상으로 uint16_t, uint32_t, wchar_t 동일한 유형을 참조 할 수 있으므로 과부하를 허용하지 않는 유형?

    class some_class {
    public:
        void set(std::string); // utf8 string
        void set(std::wstring); // wchar string utf16 or utf32 according
                                 // to sizeof(wchar_t)
        void set(std::basic_string<uint16_t>)
                             // wchar independent utf16 string
        void set(std::basic_string<uint32_t>);
                             // wchar independent utf32 string
    
    #ifdef HAVE_NEW_UNICODE_CHARRECTERS
        void set(std::basic_string<char16_t>)
                             // new standard utf16 string
        void set(std::basic_string<char32_t>);
                             // new standard utf32 string
    #endif
    };
    

    그래서 나는 그냥 쓸 수 있습니다.

    foo.set(U"Some utf32 String");
    foo.set(u"Some utf16 string");
    
  2. Typedef는 무엇입니까? std::basic_string<char16_t> 그리고 std::basic_string<char32_t> 오늘이있는 것처럼 :

    typedef basic_string<wchar_t> wstring.
    

    참조를 찾을 수 없습니다.

    편집 : GCC-4.4의 헤더에 따르면 이러한 새로운 유형을 소개했습니다.

    typedef basic_string<char16_t> u16string;
    typedef basic_string<char32_t> u32string;
    

    나는 이것이 GCC-Im이 아닌 실제 표준 요구 사항인지 확인하고 싶습니다.

도움이 되었습니까?

해결책

1) char16_t 그리고 char32_t 뚜렷한 새로운 유형이 될 것이므로 과부하가 가능합니다.

인용 ISO/IEC JTC1 SC22 WG21 N2018:

정의하다 char16_t 이름이있는 독특한 새로운 유형에 대한 타이핑이 되려면 _Char16_t 그것은 크기와 표현이 동일합니다 uint_least16_t. 마찬가지로 정의하십시오 char32_t 이름이있는 독특한 새로운 유형에 대한 타이핑이 되려면 _Char32_t 그것은 크기와 표현이 동일합니다 uint_least32_t.

추가 설명 (devx.com 기사에서 "유니 코드 혁명을 준비하십시오"):

왜 그런지 궁금 할 것입니다 _Char16_t 그리고 _Char32_t typedef가있을 때 처음에는 유형과 키워드가 필요합니다. uint_least16_t 그리고 uint_least32_t 이미 사용할 수 있습니다. 새로운 유형이 해결하는 주요 문제는 과부하입니다. 이제 기능을 과부하 할 수 있습니다 _Char16_t 그리고 _Char32_t인수, 다음과 같은 전문화를 만듭니다 std::basic_string<_Char16_t>그것은 구별됩니다 std::basic_string <wchar_t>.

2) u16string 그리고 u32string 실제로 C ++ 0X의 일부이며 GCC'ism만이 아닙니다. 다양한 표준 초안 용지. 그들은 새로 포함될 것입니다 <string> 헤더. 같은 기사에서 인용 :

표준 라이브러리도 제공합니다 _Char16_t 그리고 _Char32_t typedefs, typedefs와 유사합니다 wstring, wcout, 다음 표준 클래스의 경우 등 :

filebuf, streambuf, streampos, streamoff, ios, istream, ostream, fstream, ifstream, ofstream, stringstream, istringstream, ostringstream, string

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top