1

我的C++ 项目中有一个可用的 Boost.Signals2signal和组合,并像这样设置;slot

//DECLARE SIGNAL
signals2::signal<void (const EN_DATA_STREAM, long, double, double, double, double,     double)> signal;

//CONNECT DATAUPDATE() OF CANDIDATE INSTANCE
signal.connect(bind(&Candidate::DataUpdate, candidateInstance, _1, _2, _3, _4, _5, _6, _7));
    
//FIRE SIGNAL
signal(iDataNumber, BarNumber(), DateTime(), Open(), High(), Low(), Close());

我一直在尝试更进一步并使用该boost.signals2 connect_extended功能,因为我想将调用的详细信息传递signal给 the ,slot以便在以后的某个时间slot可以断开自身与 the的连接。signal对此的语法使我无法理解。请有人演示如何转换上述代码,以便connect_extended将连接信息传递给slot.

PS 我一直在查看 boost 网站上提供的这个示例,但对于如何根据我的参数使用的要求来定制它仍然不明智bind

Boost.Signals2 connect_extended 示例

谢谢

4

1 回答 1

1

唯一的优点connect_extended是它允许槽接收connection对象,这在多线程程序中可能是至关重要的,其中槽调用可能在connect_extended返回之前发生在另一个线程中。您不需要connect_extended传递任何其他信息,因为您可以直接绑定它。无论如何,您可以使用以下方法执行此操作connect_extended

#include <boost/signals2.hpp>

using namespace boost::signals2;

void your_slot(connection conn, int, double, int, char)
{
}

int main()
{
  signal<void(int, double, int)> your_signal;
  your_signal.connect_extended(boost::bind(&your_slot, _1, _2, _3, _4, 'a'));
  your_signal(1, 2.0, 3);
}
于 2013-05-18T17:33:05.893 回答