我有一个适用于Windows的Visual Studio 2008 C ++应用程序,其中包含了一些基于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。
答案 0 :(得分:0)
此?
template<typename T>
inline DWORD QueryValue( HANDLE h, T str )
{
//...
}
template<>
inline DWORD QueryValue<LPCSTR>( HANDLE h, LPCSTR str )
{
//...
}
除非您使用LPCSTR
参数明确调用它,否则将调用第一个版本。