0
我有一个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);
}
我宁愿模板化这使得基于我传递,而不是ifdef
什么类型的字符串的编译器可以自动选择SomeFunc
正确的版本。
template< typename charT >
inline DWORD QueryValue(HANDLE h, const charT* str)
{
// Call ::SomeFuncW or ::SomeFuncA depending on the type of `charT`.
}
有没有人有关于如何完成的建议?最好不诉诸于RTTI。
是的......当然。模板专业化正是我所需要的。 – PaulH 2012-03-13 14:29:24
为什么你需要将其作为模板?超载肯定是足够的。 – 2012-03-13 15:11:15
@MikeSeymour这是我的第一个想法,但它不能决定之间,如果你传递给它一个NULL指针。 ;) – 2012-03-13 15:11:54