1

我正在尝试这样做:

boost::signals::connection c = somesignal.connect(
[c]()->void{
    // Do something
    c.disconnect();
})

这会导致问题吗?

连接 c 仅在连接后分配。

连接前需要初始化 lambda。

似乎按价值捕获是行不通的。但是,我不能通过引用捕获,因为 c 只是一个局部变量。

如果它不是 lambda,我可以捕获“somesignal”,并调用 somesignal.disconnect(slot)。但在 lambda 的情况下,插槽就是它本身。

4

1 回答 1

1

使用扩展槽,Signals2将连接对象传递给它。它主要是为线程安全而设计的,但您也可以将其用于您的目的:

somesignal.connect([](const connection &c)->void 
{
  // Do something
  c.disconnect();
});

(顺便说一句,与标题所暗示的相反,它实际上不是“自动断开”,而是手动断开。要自动断开插槽,可以使用跟踪机制。)

于 2014-03-14T12:18:03.103 回答