gpt4 book ai didi

c++ - 如何将 std::bind 结果存储到 std::function

转载 作者:搜寻专家 更新时间:2023-10-31 00:52:19 25 4
gpt4 key购买 nike

我想将回调存储到 std::function<int(int,int>>目的。当我使用 lambda 时,它工作正常。但是当我使用 std::bind给一个成员函数,它编译错误。

有示例错误代码。

#include <functional>
#include <iostream>

using namespace std;

class A
{
public:
void foo()
{
std::function<int(int,int)> callback = std::bind(&A::calc, this);
// std::function<int(int,int)> callback = [this](int a, int b) { return this->calc(a, b); }; // lambda works fine
int r = callback(3, 4);
cout << r << endl;

}

int calc(int b, int c) { return b + c; }
};

int main()
{
A a;
a.foo();
return 0;
}

错误信息:

 In member function 'void A::foo()':
12:72: error: conversion from 'std::_Bind_helper<false, int (A::*)(int, int), A*>::type {aka std::_Bind<std::_Mem_fn<int (A::*)(int, int)>(A*)>}' to non-scalar type 'std::function<int(int, int)>' requested

代码链接:http://cpp.sh/9pm3c

最佳答案

你需要指明 A::calc 接受 2 个参数,使用 std::placeholders::X 来做到这一点:

std::function<int(int,int)> callback = std::bind(&A::calc, this, std::placeholders::_1,std::placeholders::_2);

关于c++ - 如何将 std::bind 结果存储到 std::function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52219156/

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