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