如何引用可调用对象?我想用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();
}
答案 0 :(得分:3)
使用std::ref
,如下所示:
sub.Subscribe(std::ref(a));
或使用引用捕获创建lambda函数:
sub.Subscribe([&a](){ a(); });
现在您正在传递引用,请确保&a
在退出本地范围后不会悬空。 (可以有很多好的方法来阻止这种情况)