是否有基本反射的轻量级信号槽实现?

时间:2012-01-17 17:17:58

标签: c++

背景

我需要实现一个动态可配置的数据处理工具包。将有几个数据处理实体,可以使用GUI工具将其组合到数据流图中。 这个想法类似于Direct Show过滤器图形(GraphEdit)或Apple的Quartz Composer。

GUI工具将图形定义存储在文件中。当实际处理开始时,将读取此定义文件,并且必须在运行时创建和连接数据处理对象。

我之前使用过Qt的信号和插槽来解决类似问题,但这次主程序没有任何GUI。所以我想使用不那么臃肿的东西。

问题

使用基本反射信号/插槽功能的最简单方法是什么?不使用Qt?

我需要定义固定数量的插槽类型(每个插槽类型都有一定的预定义功能签名)。 例如,将有一个图像消耗插槽,将图像对象作为参数,或者将一个int作为参数。

在运行时,我需要遍历所有信号/插槽并动态连接它们。

我不需要在运行时检查插槽/信号参数。足以拥有固定数量的参数集。可以在插槽名称中添加一些提示来识别签名类型。

我知道boost有signal2,它提供信号/插槽功能。但是,实现反射的最快方式是什么?我应该建立自己的一套宏观黑客吗?

3 个答案:

答案 0 :(得分:0)

我没有使用它,但似乎cpgf具有您需要的所有功能(反射和信号/插槽)。

答案 1 :(得分:0)

我相信你可以使用Qt开发非GUI工具。 AFAIR,doxygen使用Qt。但是我还没有自己使用Qt。

另外一个建议是,除非你准备投入大量的时间和精力,否则你不应该实施反射系统。您可以在应用程序中实现脏的快速反射系统,但随着应用程序的增长,您可能会发现需要更多时间来维护或改进它。
还要忘记用于反射的宏。宏太丑了,太容易出错。

对于我的cpgf库(我是作者),我还没准备好推广它,因为它很新(不到一年)而且没有其他库那么成熟。但是,我真的很感激,如果有任何真正的项目使用它来验证它在现实世界中工作,而不仅仅是在单元测试中工作。我想为错误修复等项目提供必要的帮助。

答案 2 :(得分:0)