Работя върху писането на някои библиотеки, които ще се използват както вътрешно, така и от клиенти, и се чудех кой е най-добрият метод за поддръжка на 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) Въпреки че няма да интернационализираме напълно нашето приложение, би било хубаво, ако можем да обработваме потребителски вход (като имена) и зареждане на файлове от пътища, които съдържат азиатски знаци.