void f(string str,int i)
{
cout<<str.c_str()<<endl;
cout<<i<<endl;
}
typedef void (*PF)(int i,string str);
int _tmain(int argc, _TCHAR* argv[])
{
PF pf=(PF)(void*)&f;
pf(10,string()); //runtime-error
return 0;
}
由於一些需要手動鍵入,我需要使用其數據類型已被擦除的f
地址調用的函數f
(如上面的代碼)。但是這種解決方案可能會導致不安全的函數調用,因爲在編譯期間無法檢查數據類型。 當參數的類型與參數不同時,是否有一些方法讓編譯器報告錯誤?如何讓編譯器檢查數據,而不C++ 11
事情是這樣的:
void f(T1 i,T2 j)
{
T1 p* = new i.real_type; //if i.real_type is different from T1, it will lead a compiling
....
}
我對此非常感謝。
真實類型是什麼意思?不,您無法安全地從void中找到「該類型」* – 2012-07-20 18:35:54
即使參數類型DO匹配,此行PF PF =(PF)(void *)&f;也被破壞(與實現有關,不可移植)。見5.2.10p8。 – 2012-07-20 19:27:54