我正在编写一些可供内部和客户使用的库,并且想知道同时支持 Unicode 和 ASCII 的最佳方法是什么。看起来微软(在 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) 虽然我们不会完全国际化我们的应用程序,但如果我们能够处理用户输入(如名称)和从包含亚洲字符的路径加载的文件,那就太好了。