У меня есть приложение Visual Studio 2008 C++ для Windows, где я обернул некоторые функции платформы, которые принимают параметры на основе TCHAR
и поэтому имеют как широкосимвольный, так и узкий вариант, выбранный ifdef
,Выбор правильной версии функции с использованием шаблонов
#ifdef UNICODE
#define QueryValueW QueryValue
#else
#define QueryValueA QueryValue
#endif
inline DWORD QueryValueW(HANDLE h, LPCWSTR str)
{
return ::SomeFuncW(h, 0, true, str, 0, 0);
}
inline DWORD QueryValueA(HANDLE h, LPCSTR str)
{
return ::SomeFuncA(h, 0, true, str, 0, 0);
}
Я предпочел бы templatize это такое, что компилятор может автоматически выбрать правильную версию SomeFunc
на основе того, какой тип строки я прохожу в а не ifdef
.
template< typename charT >
inline DWORD QueryValue(HANDLE h, const charT* str)
{
// Call ::SomeFuncW or ::SomeFuncA depending on the type of `charT`.
}
Есть ли у кого-нибудь предложение о том, как это можно сделать? Предпочтительно, не прибегая к RTTI.
Да ... конечно. Специализация шаблона - именно то, что мне нужно. – PaulH
Зачем вам нужно создать шаблон? Конечно, перегрузки достаточно. –
@MikeSeymour, это была моя первая мысль, но она не может решить, между двумя, если вы передадите ей указатель NULL. ;) –