У нас есть куча устаревшего кода, который не поддерживает Unicode, поэтому переходный шаблон, который мы используем в нашем коде, - это перемещение функции в файл .inl
, изменение char
на CHAR_TYPE
и затем оберните это так:
#define CHAR_TYPE wchar_t
#define STRING_TYPE std::wstring
#define MyFunctionName MyFunctionNameW
#include "MyFunction.inl"
#undef CHAR_TYPE
#define CHAR_TYPE char
#undef STRING_TYPE
#define STRING_TYPE std::string
#undef MyFunctionName
#define MyFunctionName MyFunctionNameA
#include "MyFunction.inl"
... где MyFunction.inl
затем определяет MyFunctionName
, используя макросы для генерации как версии «A», так и версии «W».
Это странно, но, к сожалению, это необходимо до тех пор, пока мы не преобразуем весь наш код для поддержки Unicode.
Есть ли альтернативный способ сделать это с помощью шаблонов? Я думаю, что было бы неплохо что-то вроде следующего:
typedef MyFunctionName<wchar_t, std::wstring> MyFunctionNameW
typedef MyFunctionName<char, std::string> MyFunctionNameA
Возможно ли это?