在boost :: signals中,'slot_type'和'slot_function_type'之间有什么区别?

时间:2012-08-15 05:42:18

标签: c++ boost boost-signals

对于boost :: signals库,在this tutorial的末尾,在“传递时隙”标题下,一个名为“slot_type”的类型用于传递所需的插槽功能以连接到信号。但是,在next example中,使用名为'slot_function_type'的类型显然会做同样的事情。

我无法弄清楚这两件事之间的区别。

我什么时候应该使用'slot_type'?什么时候应该使用'slot_function_type'?

1 个答案:

答案 0 :(得分:3)

slot_typeboost::slot<slot_function_type>

对于信号boost::signal<R(T1, T2, ... TN)>slot_function_type是类型擦除的函数对象类boost::functionN<R, T1, T2, ... TN>,相当于std::function<R(T1, T2, ... TN)>,因此它可以保存支持信号调用签名的任何对象(例如函数指针,可调用对象,boost::bind等)。

slot_type包含slot_function_type的隐式构造函数,但它还包含通过boost::trackable进行自动连接管理的机制(请参阅教程中的Automatic connection management (Intermediate))。< / p>

除非您有某些特定原因要使用slot_type,否则您希望使用slot_function_type,因为这样可确保您需要使用自动连接管理时,它才能正常工作。 slot_type有一个模板化的隐式构造函数,因此可以使用slot_function_type传递给boost::signal::connect()的任何地方。