bind 函数一般分为以下三种使用情况:
普通函数
auto f1 = std::bind(f, args); // 默认拷贝传递
auto f2 = std::bind(f, ref(i), _1); // 引用传递
auto f3 = std::bind(f, cref(i), _1); // 常引用传递
函数对象
struct F{
int operator()(int a, int b) {
return a + b;
}
};
F f;
auto f1 = std::bind(f, _1, 10);
std::cout << f1(1) << std::endl; // 输出 11
成员函数
class Foo {
public:
void print_sum(int a, int b)
{
std::cout << a + b << '\n';
}
void print_sum_10(int a)
{
// 类内添加 this
auto f1 = std::bind(&Foo::print_sum, this, _1, 10);
f1(a);
}
};
int main()
{
Foo f;
int a = 1;
f.print_sum(a, 1); // 2
f.print_sum_10(a); // 11
auto f2 = std::bind(&Foo::print_sum, &f, _1, 20); // 21
f2(a);
return 0;
}