作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试学习 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
来绑定(bind) foo
实例:
test(std::bind(&Foo::print_add, &foo, std::placeholders::_1));
关于c++ - 如何用成员函数初始化 `std::function`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23962019/
我是一名优秀的程序员,十分优秀!