2012-08-15 62 views
2

对于boost :: signals库,在标题“传递时隙”下的this tutorial末尾,使用一种名为'slot_type'的类型来传递所需的插槽函数以连接到信号。但是,在next example中,他们使用名为'slot_function_type'的类型显然是同样的事情。在boost :: signals中,'slot_type'和'slot_function_type'有什么区别?

我还没有弄清楚这两件事之间有什么不同。

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

回答

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))。

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

+0

这很有道理。 谢谢。 – karadoc 2012-08-17 03:05:41

相关问题