Я бы пошел с простой wchar_t
Преимущество TCHAR
состоит в том, что он позволяет включать и выключать Юникод, и ваш код, обращающийся к Windows API, будет работать.
Проблема в том, что никакой другой API его не примет.
std::cout
будет подавлен std :: wstring ,
std :: string будет подавлен при инициализации wchar_t*
и т. Д.
С точки зрения любой другой библиотеки вы должны использовать либо char
, либо wchar_t
, и переключение между ними нетривиально.
И поскольку совместимость с не-Unicode была проблемой только в Windows 95, поддерживать их больше нет смысла. Включите Unicode, используйте wchar_t
и избавьте себя от головной боли.
Конечно, чтобы избежать путаницы, вы можете также вызывать * W-версии функций Win32. Вместо CreateWindow, например, CreateWindowW, так что даже если кто-то скомпилирует ваш код с отключенным Юникодом в настройках проекта, он все равно будет работать. Если вы собираетесь использовать жесткий код для поддержки Unicode, вы можете сделать это последовательно.