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

Use std::bind and store into a std:: function

我正在尝试使用 std::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);
}

占位符在 std 命名空间中自己的命名空间中。 添加 using namespace std::placeholders 或使用 std::placeholders::_1

很好的例子:std::placeholders::_1, std::placeholders::_2, ..., std::placeholders::_N

占位符 _1_2_3... 放置在命名空间 std::placeholders 中,您应该像

一样限定它
Callback c = std::bind(handler, std::placeholders::_1);

或者

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