Почему std:: u16cout отсутствует?

С++ 03 определяет два типа символов: char и wchar_t. (позволяет игнорировать безумие signed char и unsigned char).

Эти два символа затем применяются к std::basic_string, std::basic_ostream и т.д. как std::string/std::wstring и std::ostream/std::wostream.

В потоках стандартная библиотека также определяет глобальные переменные std::cout и std::wcout.

Новый стандарт С++ 0x определяет еще два типа символов char16_t и char32_t. Однако единственными новыми typedef являются std::u16string и std::u32string.

Почему стандартная поставка a std::u16ostream? Или как насчет std::u32cout?

Ответ 1

Было решено, что реализация Unicode iostreams - это слишком много работы, чтобы стоить того: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2238.html

Из статьи:

Обоснование отсутствия специализации потока двух новых типов состояло в том, что потоки типов не char не привлекали широкого использования, поэтому неясно, что существует настоятельная потребность в удвоении числа спекализаций этого очень сложного механизма,

Из того, что я понимаю, стандартный комитет понял, что сериализация для широкоформатных (2- или 4-байтных форматов) является необычной, и где вам нужны UTF-16 или UTF-32, вы всегда можете реализовать ее самостоятельно, используя те же старые char байт-потоки, но с фасеткой codecvt, чтобы преобразовать ваш вход в UTF-16/UTF-32, который он мог бы рассматривать как еще один-многобайтовый формат.

Ответ 2

Я не знаю официальной причины.

Но я не вижу необходимости в одном.
Имея потоки определенного типа, вы используете жесткое кодирование. Я бы предпочел потоки, которые являются общими (обрабатывают байты), которые затем можно настроить для вывода в определенный формат. Как они в настоящее время работают.

Таким образом, я хочу использовать строки UTF16. Но на выходе я хочу сериализовать их для UTF8 для хранения. Для этого я бы просто выделил, чтобы создать нормальный поток, наполнить его языковой версией, которая знает, как конвертировать из UTF16 → UTF8, тогда весь поток должен выполнять обработку байтов.

Поток понимает формат на диске, вы очень мало. Наличие языка, который может конвертировать между различными форматами (на устройстве на внутренний и наоборот), очень удобен.