我正在編寫一些內部和客戶使用的庫,並想知道支持Unicode和ASCII的最佳方法。它看起來像微軟(在MFC庫)使用宏在頭文件中寫入兩個Unicode和ASCII類和做一些與此類似:在C++中創建支持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的?
想知道人們在這種情況下做什麼是最好的。
UPDATE:解決了一些意見和問題:
- 這將是C++類庫。
- 我相信我需要使用UTF-16編碼,因爲我想支持亞洲字符集。
- 我使用Unicode的原因有兩個:1)所有新的SDK都支持Unicode,我不相信未來的SDK或第三方庫將來會支持單獨的ASCII版本。 2)雖然我們不會完全國際化我們的應用程序,但如果我們能夠處理用戶輸入(如名稱)和從包含亞洲字符的路徑加載的文件,那將會很好。
你正在開發一個平面C風格的API或一組C++類嗎? – Michael 2009-09-30 18:02:57
你的例子有一個問題:你需要別名返回類型的方法,如果你想有任何編譯它的方法本身(儘管你可能不得不在方法的實現中使用#define )。 – 2009-09-30 18:11:56
根據我的經驗,您不需要爲亞洲(CJK)字符使用UTF-16。我的程序使用多字節UTF-8處理它們沒有任何類型的魔法。 – akaltar 2013-07-07 09:47:31