【发布时间】:2016-11-18 19:54:09
【问题描述】:
可以将 C++ 信号链接到具有不同参数列表的槽吗?
即一个插槽需要 1 个参数,另一个插槽需要 2 个参数,等等......
然后您使用 1 或 2 个参数调用该信号并调用相应的插槽?
【问题讨论】:
可以将 C++ 信号链接到具有不同参数列表的槽吗?
即一个插槽需要 1 个参数,另一个插槽需要 2 个参数,等等......
然后您使用 1 或 2 个参数调用该信号并调用相应的插槽?
【问题讨论】:
不,signal 实例的数量是由它的类型定义的。如果您检查boost::signals2 template class(或已弃用的boost::signals)的定义:
template<typename Signature,
typename Combiner = boost::signals2::optional_last_value<R>,
typename Group = int, typename GroupCompare = std::less<Group>,
typename SlotFunction = boost::function<Signature>,
typename ExtendedSlotFunction = boost::function<R (const connection &, T1, T2, ..., TN)>,
typename Mutex = boost::signals2::mutex>
class signal : public boost::signals2::signal_base {
信号及其槽的调用签名固定在模板参数中。
一种解决方法是定义一个可以包含多种数据的Event 参数类型,例如由子类定义。
【讨论】: