Modern c++ 提供了一种实现类似于函数指针的新技术,即使用std::bind 来给一个函数事先绑定好已知的参数,留下未知参数的空位,当真正调用的时候,填充上之前未绑定的参数。要使用std::bind, 需要#include<functional>
先举一个简单的例子,假设有函数
例1.
double add3number(double a, double b, double c)
{
std::cout <<"a:" <<a <<" b:" << b <<" c:" << c <<std::endl;
return a + b + c;
}
我们打算缺省第一个参数,给第二个和第三个参数绑定,那么绑定和调用的方式如下
auto bind1st = std::bind(add3number,std::placeholders::_1, 6, 7);
bind1st(3); // 3 6 7
bind1st(3, 5); // 3 6 7
这里参数2 和 3已经在std::bind 里绑定,所以调用时只需要传递第一个参数,即便像 bind1st(3, 5)传递了第二个参数,也会被预先绑定的参数覆盖。
我们简单的举一反三一下,如果我们只绑定第一个参数,剩下的两个参数都需要后续传入,我们该怎么实现?
例2.
auto onl