1

我想将一些模块与 boost::signals2 相互连接。每个模块都是某个类的对象,并且有自己的信号,例如:

boost::signals2::signal<void (cv::Mat, int)> outputSignal;

信号和插槽的签名因模块而异。因此,信号的类型和时隙会有所不同。我希望模块的接口允许以通用方式连接这些模块。

我想要的是一个像 module.connect(slot) 这样的接口方法,我可以给任何插槽,如果签名符合模块信号的签名,它将插槽连接到模块的信号,或者如果签名不合适,则会出错. 或者我希望模块返回它的信号,以便插槽可以使用 signal.connect(slot) 直接连接到返回的信号。但是所有模块的信号和插槽都没有相同的类型。所以我还没有找到在接口中实现这些方法的方法。参数类型或返回类型需要根据模块的信号而变化。

由于系统应该是可扩展的,并且可以使用不同类型的信号和插槽添加新模块,因此事先不知道它们。所以硬编码类型和重载方法是不够的。

有人知道我如何实现这个接口吗?我很感谢任何建议和帮助。

4

0 回答 0