我知道 Iĺl 在这里得到了很多反对意见,但是如果你想要一些东西,渴望得到它,知道风险并同意它,你可以降低编译器检查以获得你想要的东西。
下面我将向您展示一种获得想要的方法。我不建议这样做,但是如果您相信这正是您想要的,请继续。
#include <iostream>
using namespace std;
typedef void (*func1) (int);
typedef void (*func2) (int, int);
void f1(int)
{
cout << "f1" << endl;
}
void f2(int, int)
{
cout << "f2" << endl;
}
void call(int x, void *t)
{
if ( x )
reinterpret_cast<func1>(t)(0);
else
reinterpret_cast<func2>(t)(0, 0);
}
int main()
{
call(0, reinterpret_cast<void*>(f1));
call(1, reinterpret_cast<void*>(f2));
}
如前所述,reinterpret_cast
降低编译器检查,基本上是说您对可能发生的所有错误负责