我正在尝试调用一个重载函数,该函数对具有默认值参数的函数指针进行操作。
void originalFunction1 (int a = 0) {printf("I'm #1 and a is %d",a);}
void originalFunction2 () {printf("I'm #2");}
void overloadedFunction (void (*fptr)(void))
{
fptr();
}
void overloadedFunction (void (*fptr)(int))
{
overloadedFunction( (void(*)(void)) fptr);
}
int main()
{
overloadedFunction(originalFunction1);
overloadedFunction(originalFunction2);
// output is:
// I'm #1 an a is -1073743272
// I'm #2
}
正如这个问题的答案所指出的,默认值不是函数签名的一部分,也不能在 (function pointer -) 参数定义期间重复。正如我的示例所示,它们可以被丢弃以进行调用,但它们不会被初始化为其默认值。
有没有办法解决这个问题?
我无法修改原始函数,但我知道默认值。我可以修改主要的重载函数以及重定向。fptr 将始终只在没有参数的情况下被调用。实际上,有更多的重载函数,因为返回类型也不同,但我可以更容易地抛弃它。