Я работаю над написанием некоторых библиотек, которые будут использоваться как внутри компании, так и клиентами, и мне было интересно, какой лучший способ поддержки Unicode и ASCII. Похоже, что Microsoft (в библиотеках MFC) записывает классы Unicode и ASCII и делает что-то подобное в файлах заголовков, используя макросы:
#ifdef _UNICODE
#define CString CStringW
#else
#define CString CStringA
#endif
Хотя я не большой поклонник макросов, он выполняет свою работу. Если я пишу библиотеки с использованием STL, имеет ли смысл писать заголовки, содержащие такие вещи:
#ifdef _UNICODE
#define GetLastErrorString GetLastErrorStringW
#else
#define GetLastErrorString GetLastErrorStringA
#endif
std::string GetLastErrorStringA();
std::wstring GetLastErrorStringW();
Или мне просто выпустить отдельные библиотеки, одну для ASCII и одну для Unicode?
Просто интересно, что люди думают о лучшем поступке в этой ситуации.
ОБНОВЛЕНИЕ: рассмотрение некоторых комментариев и вопросов:
- Это будут библиотеки классов C ++.
- Я считаю, что мне нужно будет использовать кодировку UTF-16, поскольку я хотел бы поддерживать азиатские наборы символов.
- У меня две причины для внедрения Unicode: 1) Все новые SDK поддерживают Unicode, и я не уверен, что будущие SDK или сторонние библиотеки будут поддерживать отдельные версии ASCII в будущем. 2) Хотя мы не будем полностью интернационализировать наше приложение, было бы неплохо, если бы мы могли обрабатывать ввод данных пользователем (например, имена) и загрузку файлов по путям, содержащим азиатские символы.