std::function
std::function
先看下面错误:
error: no match for call to '(std::_Bind<void (Foo::(int,int))(int, int)>) ()
这种错误是在使用c++中std::function时,定义的参数的和bind的参数不一致导致的。
具体来说就是:
bind 绑定类成员函数时,第一个参数表示对象的成员函数的指针,第二个参数表示对象的地址。
1:必须显示的指定 &Foo::print_sum ,
因为编译器不会将对象的成员函数隐式转换成函数指针
所以必须在 Foo::print_sum 前添加 &
:2: 使用对象成员函数的指针时,必须要知道该指针属于哪个对象
因此第二个参数为对象的地址 &foo
定义一个函数模板
struct Foo {
void print_sum(int n1,int n2){
std::cout << n1+ n2<< '\n';
}
int data = 10;
};
int main(){
Foo foo;
auto f = std::bind(&Foo::print_sum,&foo,95,5);
f(); // 100
}