Автоматически переключаться между std :: string и std :: wstring в соответствии с настройкой Unicode в MSVC ++? - PullRequest
7 голосов
/ 26 мая 2011

Я пишу DLL и хочу иметь возможность переключаться между юникодом и многобайтовой настройкой в ​​MSVC ++ 2010. Например, я использую _T("string") и LPCTSTR и WIN32_FIND_DATA вместо версий -W и -A и так далее.

Теперь я хочу иметь std :: strings, которые меняются от std::string до std::wstring в соответствии с настройкой Unicode. Это возможно? В противном случае это, вероятно, станет чрезвычайно сложным.

1 Ответ

12 голосов
/ 26 мая 2011

Почему бы не сделать так, как это делает Win32 API: используйте широкие символы внутри и предоставьте символьно-конвертирующий фасад функций DoSomethingA, которые просто преобразуют их ввод в Unicode.

Тем не менее, вы можете определить тип tstring следующим образом:

#ifdef _UNICODE
typedef std::wstring tstring;
#else
typedef std::string tstring;
#endif

или, возможно:

typedef std::basic_string<TCHAR> tstring;
...