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