gpt4 book ai didi

c++ - 使用 std::bind 并存储到 std::函数中

转载 作者:行者123 更新时间:2023-12-02 09:51:37 25 4
gpt4 key购买 nike

我正在尝试使用 std::bind 绑定(bind)到函数并将其存储到我的 std::function 回调对象中。我写的代码是我实际代码的简化版本。下面的代码无法编译,说

_1 was not declared in the scope


注意:我知道使用 lambda 也可以做到这一点。但是函数处理程序已经存在并且需要使用,否则我需要在 lambda 中调用处理程序。
#include <iostream>
#include <functional>

typedef std:: function<void(int)> Callback;

template <class T>
class Add
{
public:
Add(Callback c)
{
callback = c;
}
void add(T a, T b)
{
callback(a+b);
}

private:
Callback callback;
};

void handler(int res)
{
printf("result = %d\n", res);
}

int main(void)
{
// create a callback
// I know it can be done using lambda
// but I want to use bind to handler here
Callback c = std::bind(handler, _1);

/*Callback c = [](int res)
{
printf("res = %d\n", res);
};*/

// create template object with
// the callback object
Add<int> a(c);
a.add(10,20);
}

最佳答案

占位符 _1 , _2 , _3 ... 被放置在命名空间 std::placeholders ,你应该像这样限定它

Callback c = std::bind(handler, std::placeholders::_1);
或者
using namespace std::placeholders;
Callback c = std::bind(handler, _1);

关于c++ - 使用 std::bind 并存储到 std::函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64181457/

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