如何绑定(bind)到采用默认参数的函数,而不指定默认参数,然后在没有任何参数的情况下调用它?
void foo(int a, int b = 23) {
std::cout << a << " " << b << std::endl;
}
int main() {
auto f = std::bind(foo, 23, 34); // works
f();
auto g = std::bind(foo, 23); // doesn't work
g();
using std::placeholders::_1;
auto h = std::bind(foo, 23, _1); // doesn't work either
h();
}
最佳答案
基本上,每当您编写 foo(x)
时,编译器都会将其转换为 foo(x, 23);
。它仅在您实际使用函数名称直接调用时才有效。例如,您不能将 &foo
分配给 void(*)(int)
,因为函数的签名是 void(int, int)
。默认参数在签名中不起作用。如果将其分配给 void(*)(int, int)
变量,则有关默认参数的信息将丢失:您无法通过该变量利用默认参数。 std::bind
在其内部某处存储了一个 void(*)(int, int)
,因此丢失了默认参数信息。
在 C++ 中无法从函数外部获取参数的默认值,因此您只能在绑定(bind)时手动提供默认值。
关于c++ - 我可以绑定(bind)到采用默认参数的函数然后调用它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10718994/