3

在 boost::signals 库本教程的最后,在“传递槽”标题下,使用了一个名为“slot_type”的类型来传递所需的槽函数以连接到信号。但是,在下一个示例中,他们使用名为“slot_function_type”的类型显然做了同样的事情。

我一直无法弄清楚这两件事之间有什么区别。

什么时候应该使用“slot_type”,什么时候应该使用“slot_function_type”?

4

1 回答 1

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(请参阅教程中的自动连接管理(中级))。

slot_type除非您有特定的使用理由,否则您想使用它slot_function_type,因为这将确保如果您需要使用自动连接管理,它就可以正常工作。 slot_type有一个模板化的隐式构造函数,所以可以在任何地方使用slot_function_type来传递给boost::signal::connect().

于 2012-08-15T09:11:00.313 回答