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

Is there a lightweight signal-slot implementation with basic reflection?

本文关键字:轻量级 信号 实现 反射的 存在 是否      更新时间:2023-10-16

背景

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

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

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

问题

在不使用Qt的情况下,具有基本反射的信号/插槽功能的最简单方法是什么?

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

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

我不需要在运行时检查插槽/信号参数。有固定数量的参数集就足够了。可以在插槽的名称中添加某种提示来标识签名类型。

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

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

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

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

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

Boost还实现了信号和插槽http://www.boost.org/doc/libs/1_49_0/doc/html/signals.html