gpt4 book ai didi

c++ - 如何用成员函数初始化 `std::function`?

转载 作者:太空狗 更新时间:2023-10-29 23:33:04 25 4
gpt4 key购买 nike

我正在尝试学习 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_addfoo 的非静态成员函数,这意味着它必须在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));

Live demo

关于c++ - 如何用成员函数初始化 `std::function`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23962019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com