Здравствуйте, WerWoolf, Вы писали:
WW>Здравствуйте. В связи с работой над одним проектом, возник вопрос в реализации класса строки. WW>Реализация должна быть кроссплатформенной. Необходима поддержка всех доступных языков, WW>т.е. ascii не подходит. Задача данного вопроса — узнать возможные варианты реализации WW>класса, их плюсы и минусы.
WW>Варианты решения:
WW>1) Класс-обертка, который хранит строку как последовательность wchar_t символов. WW>Здесь хотелось бы узнать плюсы или минусы данного варианта.
WW>2) Класс-обертка, который хранит строку как последовательность char символов, но в WW>кодировке utf-8. Реализовать конвертеры в другие кодировки. WW>Здесь хотелось бы узнать плюсы или минусы данного варианта.
WW>3) Другой вариант (который вы считаете лучшим).
WW>Я не прошу вас реализовывать данный класс, просто хотелось бы систематизировать данные WW>по этому вопросу. Надеюсь на конструктивные ответы. WW>Всем спасибо.
WW>P.S. Пожалуйста, не предлагайте использовать уже существующие классы из сторонних библиотек, WW>такие как QString и т.п.
И std::string и std::wstring кросс-платформены и могут хранить любые символы до тех пор пока вы их интерпретируете как UTF-8 и UTF-16.
Обычно внутри программы (системы) имеет смысл принять один из вышеперечисленных и и спользовать его. А вовне отдавать конвертируя в нативное представление.
На Виндах нативное обычно UTF-16, в прочих больше прижилось UTF-8. Самый головняк, что стандартная библиотека MSVC поддерживает UTF-16, но UTF-8 не понимает считая его ANSI, а в остальных банально нету во многих местах поддржки UTF-16 (типа открыть файл/стрим). Это если конечно ниче не поменялось.
Поэтому пока у вас задача только хранить (и неизвестно надо ли еще чего-то) выберите кодировку и успокойтесь. Как надо будет что-то еще — ICU обычно хорошее решение, но часто можно обойтись и системным API.