如何制作std :: function reference

时间:2018-05-07 09:25:55

标签: c++

如何引用可调用对象?我想用std :: function创建一个pub / sub。从下面的代码中,我制作了Test的副本,还是其他的东西?另类建议也欢迎。

using Callback = std::function<void ()>;

struct Test
{
    void operator()()
    {
        std::cout << a ;
    };

    int a;
};

struct Sub
{
void Subscribe(Callback callback)
{
    callback_ = callback;
}

void trigger()
{
     callback_();
}

Callback callback_;
};

int main() {

    Test a = {1};

    Sub sub;
    sub.Subscribe(a);
    a.a = 2;
    sub.trigger();

}

1 个答案:

答案 0 :(得分:3)

使用std::ref,如下所示:

sub.Subscribe(std::ref(a));

或使用引用捕获创建lambda函数:

sub.Subscribe([&a](){ a(); });

现在您正在传递引用,请确保&a在退出本地范围后不会悬空。 (可以有很多好的方法来阻止这种情况)