对于boost :: signals库,在this tutorial的末尾,在“传递时隙”标题下,一个名为“slot_type”的类型用于传递所需的插槽功能以连接到信号。但是,在next example中,使用名为'slot_function_type'的类型显然会做同样的事情。
我无法弄清楚这两件事之间的区别。
我什么时候应该使用'slot_type'?什么时候应该使用'slot_function_type'?
答案 0 :(得分:3)
slot_type
是boost::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()
的任何地方。