我想将一些模块与boost :: signals2相互连接起来。每个模块都是某个类的对象,并且有自己的信号,例如:
boost::signals2::signal<void (cv::Mat, int)> outputSignal;
信号和插槽的签名因模块而异。因此,信号和插槽的类型会有所不同。我希望模块的接口允许以通用方式连接这些模块。
我想要的是一个像module.connect(slot)这样的接口方法,我可以给任何插槽,如果签名符合模块信号的签名,它会将插槽连接到模块的信号,如果签名没有,则会出错不合适。或者我希望模块返回它的信号,这样插槽可以使用signal.connect(slot)直接连接到返回的信号。但是信号和插槽对于所有模块都没有相同的类型。所以我还没有找到在界面中实现这些方法的方法。参数类型或返回类型需要根据模块的信号而变化。
由于系统应该是可扩展的,并且新模块可以添加不同类型的信号和插槽,因此它们不是预先知道的。因此,对类型进行硬编码并使方法过载是不够的。
有没有人知道如何实现这个界面?我很感谢任何建议和帮助。