3

我一直在查看一些相关的线程,但仍然没有找到任何可以回答以下问题的内容。

假设我有一个形成树结构的类层次结构(例如小部件、HTML 元素)。当我遍历树或根据其 ID 查找具体元素时,我得到一个指向基类的指针(树算法只知道基类)。

然后,根据类型(基类有一个标识类型的字段),我执行 dynamic_cast 以获得指向具体类型的指针。我一直在想办法避免这种情况。我唯一想到的是访问者模式。但是不太喜欢这种模式。

是否有其他方法/模式来搜索/迭代节点并在不使用 RTTI 或访问者模式的情况下获取指向具体类的指针?

4

2 回答 2

0

这实际上取决于访问者模式的实现。使用 dynamic_cast<> 是一种方法,另一种方法可能是通过定义可以在所有子类中实现的虚拟 GetType() 函数来使用手工制作的 RTTI。根据该功能的结果,您可以做不同的事情。

于 2013-03-14T11:27:37.427 回答
0

你的方法听起来不是一个好主意。主要是因为您必须在运行时之前完成所有考虑。

您想要做的基本上是列出和访问对象的特定属性。使用动态转换,这是可能的,但很难做到优雅——因为您必须提前编写大量开关并硬编码每种可能性,以便您可以在运行时使用它。

我像往常一样推荐的解决方案是 Qt 框架。您可以在运行时列出每个对象的属性,通过名称字符串或索引访问特定属性,甚至可以在运行时附加代码中不存在的属性。所有这一切都与类型无关,您无需知道对象的类型即可知道其属性,最后 - Qtqobject_cast为 QObject 派生类提供了明显更快的速度,而不是dynamic_cast.

元系统允许您了解类名、基类名、方法、枚举、构造函数和几乎所有内容,因此除了属性之外,它还是访问实例可用的所有功能的良好来源。

于 2013-03-14T10:07:29.377 回答