У меня есть приложение 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 );
}
Я бы предпочел шаблонизировать это так, чтобы компилятор мог автоматически выбрать правильную версию SomeFunc
в зависимости от типа передаваемой строки, а не ifdef
.
template< typename charT >
inline DWORD QueryValue( HANDLE h, const charT* str )
{
// Call ::SomeFuncW or ::SomeFuncA depending on the type of `charT`.
}
Есть ли у кого-нибудь предложения о том, как это можно сделать? Желательно без обращения к RTTI.