Проблема для Linux и использования Unicode заключается в том, что все операции ввода-вывода и большинство системных функций используют UTF-8, а тип широких символов - 32-разрядный.Затем происходит взаимодействие с Java и другими программами, для которых требуется UTF-16.
В качестве предложения по поддержке Unicode см. Библиотеку OpenRTL по адресу http://code.google.com/p/openrtl, которая поддерживает все UTF-8, UTF-16 и UTF-32 в Windows, Linux, Osx и Ios.Поддержка Unicode - это не только типы символов, но также сортировка Unicode, нормализация, сворачивание регистра, регистр заголовка и около 64 различных свойств символов Unicode на полный 32-разрядный символ без знака.
Теперь код OpenRTL готов к поддержкеchar8_t, char16_t и char32_t также для новых стандартов C ++, хотя те же типы символов поддерживаются с помощью макросов для существующих компиляторов C и C ++.Я думаю, что для обработки Unicode и строк это может быть то, что вам нужно для вашей библиотеки.
Дело в том, что если вы используете OpenRTL, вы можете собрать систему, используя тип OpenRTL "char_t".Это поддерживает идею о том, что вся ваша библиотека может быть построена в режиме UTF8, UTF16 или UTF32, даже в Linux, потому что OpenRTL уже обрабатывает весь интерфейс многих системных функций, таких как файлы и другие вещи.Например, он имеет свои собственные функции print_f.
По умолчанию char_t соответствует типу широких символов.Так что в Windows это 32-битная версия, а в Linux она 32-битная.Но вы можете сделать это также, например, 8 бит везде.Также имеется поддержка быстрого UTF-декодирования внутри циклов с использованием макросов.
Таким образом, вместо ifdeffing между wchar_t и char, вы можете построить все, используя char_t, а OpenRTL позаботится обо всем остальном.