我正在尝试学习std::function
,这是我的代码:
#include <iostream>
#include <functional>
struct Foo {
void print_add(int i){
std::cout << i << '\n';
}
};
typedef std::function<void(int)> fp;
void test(fp my_func)
{
my_func(5);
}
int main(){
Foo foo;
test(foo.print_add);
return 0;
}
编译器错误:
error: cannot convert 'Foo::print_add' from type 'void (Foo::)(int)' to type 'fp {aka std::function<void(int)>}'
test(foo.print_add);
我该如何进行这项工作,即如何将成员函数作为参数传递?
print_add
是的非静态成员函数foo
,这意味着必须在的实例上调用Foo
;因此它有一个隐式的第一个参数,即this
指针。
使用捕获foo
实例并print_add
在其上调用的lambda 。
Foo foo;
test([&foo](int i){ foo.print_add(i); });
另一个选择是用来std::bind
绑定foo
实例:
test(std::bind(&Foo::print_add, &foo, std::placeholders::_1));
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句