在 boost::signals 库本教程的最后,在“传递槽”标题下,使用了一个名为“slot_type”的类型来传递所需的槽函数以连接到信号。但是,在下一个示例中,他们使用名为“slot_function_type”的类型显然做了同样的事情。
我一直无法弄清楚这两件事之间有什么区别。
什么时候应该使用“slot_type”,什么时候应该使用“slot_function_type”?
在 boost::signals 库本教程的最后,在“传递槽”标题下,使用了一个名为“slot_type”的类型来传递所需的槽函数以连接到信号。但是,在下一个示例中,他们使用名为“slot_function_type”的类型显然做了同样的事情。
我一直无法弄清楚这两件事之间有什么区别。
什么时候应该使用“slot_type”,什么时候应该使用“slot_function_type”?
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
(请参阅教程中的自动连接管理(中级))。
slot_type
除非您有特定的使用理由,否则您想使用它slot_function_type
,因为这将确保如果您需要使用自动连接管理,它就可以正常工作。 slot_type
有一个模板化的隐式构造函数,所以可以在任何地方使用slot_function_type
来传递给boost::signal::connect()
.