gpt4 book ai didi

C++,避免 RTTI 和访问者模式,可能吗?

转载 作者:太空狗 更新时间:2023-10-29 23:18:01 26 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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

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

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

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

关于C++,避免 RTTI 和访问者模式,可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15405688/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com