我是C++中的可變參數模板的新手,所以對於這裏的有經驗的人來說,這個問題可能看起來有些不好。C++ variadic模板 - NULL轉換爲int
我試圖做的是創建一個proxy function
,它將能夠使用可變參數模板將我的參數重定向到任何其他函數。
我的代碼如下:
template <typename Ret, typename ... Types>
Ret proxy_function(Types ... args)
{
return MessageBoxA(args...);
}
int main(int argc, char* argv[])
{
boost::any retval = proxy_function<boost::any>(NULL, "123", "456", 0);
}
在編譯時,編譯器輸出下列錯誤:
1>Main.cpp(107): error C2664: 'int MessageBoxA(HWND,LPCSTR,LPCSTR,UINT)' : cannot convert argument 1 from 'int' to 'HWND'
然而,當我提供了下面的代碼只是正常工作:
template <typename Ret, typename ... Types>
Ret proxy_function(Types ... args)
{
return MessageBoxA(NULL, args...);
}
int main(int argc, char* argv[])
{
boost::any retval = proxy_function<boost::any>("123", "456", 0);
}
世界上有什麼原因讓編譯器無法將它轉換爲HWND類型嗎?
另一個問題,我腦海中現在有關於這個問題 - 是否有可能找出函數內的參數類型? 我希望能夠做到這一點的東西:
template <typename Ret, typename ... Types>
Ret proxy_function(Types ... args)
{
psuedo-code:
for arg in args:
do_stuff<type(arg)>(arg);
}
由於提前,特拉維夫
使用'nullptr'。這就是它存在的原因。 – chris
那麼,對於我的第一個問題 - NULL也定義爲0並且也是(void *)0,因此這兩個類型與HWND不兼容。 快速修復針對此問題將是: INT主(INT的argc,字符* argv的[]){ 升壓 ::任何RETVAL = proxy_function((HWND)0, 「123」, 「456」, 0); } 但我想強制我的編譯器AUTOMATICALLY使用reinterpret_cast將0轉換爲HWND。 –
CodeNinja
如果您有兩個問題,爲什麼不提出兩個不同的問題? – Yakk