首页 > 解决方案 > 如何将 class1 的 std::function 绑定到 class2 的 func ?

问题描述

class foo {
public:
    std::function<void(int)> func;
};

class obj {
public:
    obj() { f.func = std::bind(&obj::update, this); }
    void update(int ms) { _ms = ms; }

private:
    int _ms;
    foo f;
};

我想绑定一个函数,obj因为当foo后者发生某些事情时,不使用观察者模式就通知其他类。有人可以帮我做到这一点吗?

标签: c++c++17

解决方案


编辑:查看您的代码,当您将 f.func 分配给 std::bind 时,您似乎缺少 std::placeholders::_1 。执行以下操作应该可以解决您的问题。

obj() { f.func = std::bind(&obj::update, this, std::placeholders::_1); }

您可以按如下方式分配函数,但老实说,如果我们将其作为 std::ref 传递,我不确定这是否是个好主意。对于这个例子,我认为它不会引起问题,因为 std::bind 正在使用 move 但是如果f它不是的成员obj并且如果它作为引用传递,那么如果在调用obj之前被破坏就会有问题f::func

class foo
{
public:
    void AssignFunc(std::function<void(int)> callback)
    {
        func  = callback;
        func(10);
    }

private:
    std::function<void(int)> func;
};

class obj {
public:
    obj()
    {
        f.AssignFunc(std::bind(&obj::update, this, std::placeholders::_1));
    }
    void update(int ms)
    {
        _ms = ms;
    }

private:
    int _ms;
    foo f;
};

推荐阅读