inf*_*inf 21 c++ bind default-arguments c++11
如何绑定到接受默认参数的函数,而不指定默认参数,然后在没有任何参数的情况下调用它?
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();
}
Run Code Online (Sandbox Code Playgroud)
R. *_*des 23
基本上,每次编写foo(x)编译器都会将其转换为foo(x, 23);.它只适用于您实际使用函数名称直接调用的情况.例如,你不能分配&foo给a void(*)(int),因为函数的签名是void(int, int).默认参数不参与签名.如果将其分配给void(*)(int, int)变量,则有关默认参数的信息将丢失:您无法通过该变量利用默认参数.std::bind存储void(*)(int, int)在其内部的某处,因此丢失了默认参数信息.
C++中没有办法从函数外部获取参数的默认值,因此在绑定时手动提供默认值时会遇到困难.
obm*_*arg 10
我想你可以使用lambda来模拟你想要的行为.
有点像这样:
auto g = [] (){ foo( 23 ); };
Run Code Online (Sandbox Code Playgroud)
编辑:刚检查,似乎工作正常:http://ideone.com/SPSvi