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