我正在尝试这样做:
boost::signals::connection c = somesignal.connect(
[c]()->void{
// Do something
c.disconnect();
})
这会引起问题吗?
连接c仅在连接后分配。
连接之前需要初始化lambda。
似乎无法按值(value)捕获。但是,我无法通过引用捕获,因为c只是局部变量。
如果不是lambda,则可以捕获“somesignal”,然后调用somesignal.disconnect(slot)。但是对于lambda,插槽本身就是。
最佳答案
使用扩展插槽,Signals2
将连接对象传递给它。它是primarily for thread-safety设计的,但是您也可以将其用于您的目的:
somesignal.connect([](const connection &c)->void
{
// Do something
c.disconnect();
});
(顺便说一句,与标题所暗示的相反,它实际上不是“自动断开连接”,而是手动断开连接。要自动断开插槽,可以使用the tracking mechanism。)