我知道你可以像这样将函数作为参数传递:
int a(int x) {
return x + 1;
}
int b(int (*f)(int), int x) {
return f(x); // returns x + 1
}
我知道你也可以创建默认参数的函数,就像这样:
int a(int x = 1) {
return x;
}
a(2); // 2
a(); // 1
然而,如何将带有默认参数的函数传递给另一个函数并保留这种行为呢?
我尝试了以下方法:
int b(int (*f)(int), int x) {
f(x); // works as expected
f(); // doesn't work because there aren't enough arguments to f
}
和
int b(int (*f)()) {
f(); // doesn't work because it cannot convert int (*)(int) to int (*)()
}
int a(int x = 1)
后,会把你的a();
转换成a(1);
并编译它。 - Drew Dormannoperator()
。这是您无法使用“愚蠢”的函数指针完成的事情。 - PaulMcKenzievoid f(int=0)
和void g(int=1)
之间的差异。您将不得不将函数与默认参数一起包装。 - zdf