如何在不使用 typeid/RTTI 的情况下确定实际对象的类型

2024-01-31

我有一个类层次结构,其中子类派生自父类。

在一个地方,我需要将任何类型的对象存储(队列)到列表 list[Parent*] 中,然后从该列表中检索对象。存储时,我存储的是指针,它指向最顶层的父类。检索时,我需要了解它实际上是哪个子对象,以便能够通过向下转换正确使用它。

最简单的方法可能是使用dynamic_cast并检查它是否返回0。但是,我知道(如果我没记错的话)这意味着使用 RTTI。

如果不使用 RTTI,您将如何实现这一目标?在父类中插入一个 mType 字段,并让任何子类为该字段分配特定的类型信息,然后在需要时检查其值(以查看类型)?但这似乎是一个麻烦的方法,不是吗?

任何帮助是极大的赞赏。

Regards.


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在不使用 typeid/RTTI 的情况下确定实际对象的类型 的相关文章

  • 扩展对象的等于想要检查 super.equals(),如果我不想进行此检查,这应该是组合而不是继承[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 所以场景如下 class Feline String name int age equals Object obj hashCode class
  • 使用类的 __new__ 方法作为工厂:__init__ 被调用两次

    我在 python 中遇到了一个奇怪的错误 其中使用 new 将类的方法作为工厂会导致 init 实例化类的方法被调用两次 这个想法最初是为了使用 new 母类的方法根据传递的参数返回其子类之一的特定实例 而无需在类外部声明工厂函数 我知道
  • Javascript 中 isPrototypeOf 和 instanceof 有什么区别?

    在我自己的一些旧代码中 我使用以下内容 Object prototype instanceOf function iface return iface prototype isPrototypeOf this 然后我就这样做 例如 inst
  • 如何有条件地实例化不同的子类?

    例如 在main函数中 我想获取用户的输入 根据输入 我将创建一个Rectangle or a Circle 它们是子类Object 如果没有输入 或未知 那么我将只创建一个通用对象 class Object public Object v
  • Python默认继承?

    如果我在Python中定义一个类 例如 class AClass slots a b c 它继承自哪个类 貌似没有继承object 如果定义一个类并且不声明任何特定的父类 则该类将成为 经典类 其行为与从对象继承的 新式类 略有不同 请参阅
  • java中的动态方法调度

    class A int a 10 public void show System out println Show A a class B extends A public int b 20 public void show System
  • 为什么要使用继承? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 继承而不是 typedef

    C 无法从 typedef 中创建模板或将 typedef 制作为模板类 我知道如果我继承并使我的类成为模板 它就会起作用 例子 Illegal template
  • C++ 多重继承关闭同名运算符

    是否可以从两个不同的抽象类继承仅返回类型不同的同名运算符 如果是这样 他们 实现运算符的语法是什么 使用 解析运算符的语法是什么 与任何其他虚函数相同 一般情况下的开销是多少 如果您可以向我提供参考或示例代码 将会有所帮助 thanks 1
  • C++ 中的静态虚函数

    我有一个基类和一个派生类 我想更改基函数 同时保持它们静态 因为它们应该作为静态传递给其他函数 我怎样才能做到这一点 ATL 框架通过将基类设为模板 然后让派生类将其类类型作为模板参数传递 从而绕过了无虚拟静态的限制 然后 基类可以在需要时
  • C# 带有泛型的异常继承语法

    我在 NHibernate 类定义中偶然发现了这一点 public class SQLiteConfiguration PersistenceConfiguration
  • 如何继承构造函数?

    Imagine具有许多构造函数和虚方法的基类 public class Foo public Foo public Foo int i public virtual void SomethingElse 现在我想创建一个重写虚拟方法的后代类
  • 重写继承的构造函数字段时的差异?

    考虑这个简单的 Scala 类 class A val d Int Scala 之间是否存在差异 无论是行为还是生成的字节码 class B d Int extends A d and class B override val d Int
  • 在 C# 中将“set”添加到接口的属性中

    我希望通过为该接口中的属性提供设置访问器来 扩展 该接口 界面看起来像这样 interface IUser string UserName get 我想要这样的东西 interface IMutableUser IUser string U
  • 如何在反应导航中将道具传递给“屏幕”/组件

    我对一般编程相当陌生 甚至对 JS 和 React Native 还比较陌生 但我已经为此工作了一整天 但我仍然没有弄清楚 所以我求助于 Stack Overflow 希望有人能帮助我可以帮我 基本上我想要完成的是设置其他Component
  • 为什么 C++ 构造函数不被继承?

    为什么这段代码中需要 Child 传递构造函数 我认为不会 但是当我删除它时编译器 gcc 和 VS2010 会抱怨 有一个优雅的解决方法吗 必须将此填充程序插入到子类中似乎毫无意义 class Parent public Parent i
  • 单表继承发现问题

    我有以下3个rails类 它们都存储在一张表中 使用rails的单表继承 class Template lt ActiveRecord Base class ThingTemplate lt Template class StockThin
  • 如何确保超类的子类方法的线程安全?

    我参加了一次面试 并被要求为以下要求设计一个课程 假设我有一个 A 类 它可以有任意数量的子类 即子类 类 A 有一个名为 doSomething 的方法 该方法是同步的 要求是 A 的所有子类都是强制性的重写 doSomething me
  • C# 中的继承树和受保护的构造函数

    给定以下继承树 以有效的方式实现它的最佳方法是什么 abstract class Foo
  • 方法不必要地被调用?

    我有一个 BaseActivity 它可以通过其他所有活动进行扩展 问题是 每当用户离开 暂停 活动时 我都会将音乐静音 我也不再接听电话 问题是 onPause每当用户在活动之间切换时就会被调用 这意味着应用程序不必要地静音和停止tele

随机推荐

  • Java冒泡排序错误输出

    我正在尝试实现一个基本的 java 冒泡排序 但我得到了错误的输入 Code is public class BubbleSort public static void main String args int arr sort new i
  • Git 非缓存文件正在上传到 Github

    我正在尝试将我的项目上传到 github 但是它有 1 个非常大的文件 超出了 github 文件大小限制 我不想搞乱大文件存储 我可以忍受 github 上没有这个文件 我已将该文件添加到我的 gitignore像这样的文件 Suppor
  • 将终端移回底部

    我不小心点击了将终端从底部移动到右侧的按钮 我怎样才能让它回到底部 再次单击拆分按钮只会拆分终端 只需移动Terminal向左分割条以加宽Terminal窗口 以便图标Move to Bottom会出现 以便您可以单击它 UPDATE Th
  • 工作副本和分支基础之间的 git diff

    我可以将大师的提示和我的工作副本进行比较 git diff master 我可以将当 前分支的尖端与其来自 master 的合并基础进行比较 git diff master 是一个git diff命令来比较当前分支和工作副本的合并基础 是
  • 根据范围滑块的用户输入重新启动 d3 模拟

    我正在使用构建一个 弹簧 d3 force https github com d3 d3 force布局 我想通过用户输入来操纵它的属性 例如 强度 和 距离 为此 我目前正在使用 输入范围滑块 为了更好地理解 我在 codepen 上制定
  • 以编程方式创建 WebView 并在视图中显示 NSString

    我以编程方式创建了一个 WebView 这很完美 代码如下 我现在需要尝试做的是注入NSStrings进去 我有一个包含 30 个字符串的数组 15 个标题和 15 个正文 是否可以将这些内容显示在 WebView 中 我猜我需要将它们更改
  • 错误:由以下原因引起:java.lang.ClassnotfoundException [重复]

    这个问题在这里已经有答案了 我对编码非常陌生 这是我的第一个应用程序 非常令人沮丧的是 当在设备或模拟器上运行所述应用程序时 出现 不幸的是 应用程序名称已停止 错误 我相信 通过查看 LogCat 我已经将问题定位到错误 java lan
  • 为什么final类不能被继承,而final方法却可以被继承?

    我对类和方法之间 final 关键字的使用有很大的困惑 即为什么final方法只支持继承 而不支持final类 final class A void print System out println Hello World class Fi
  • 如何创建对象列表?

    如何在 Python 中创建对象 类实例 列表 或者这是糟糕设计的结果 我需要这个 因为我有不同的对象 我需要在稍后阶段处理它们 所以我会继续将它们添加到列表中并稍后调用它们 存储对象实例列表非常简单 class MyClass objec
  • Berkeley DB 的最佳 Python 模块? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 根据 Python 2 6 5 文档 1 bsddb 模块已在 Python 3 0 中被弃用并删除
  • 为我的 Android 应用程序选择正确的 API 级别

    我目前有一个针对 android 2 3 api level 10 的应用程序 但我认为probably使用 android 2 1 2 2 或更早版本的人甚至无法在市场上看到该应用程序 所以我认为使用 api level 3 是最好的选择
  • 如何使用 usingColumns 连接 Spark 中的嵌套列

    我有 2 个数据框想要加入 DF1 root myStruct struct nullable true id string nullable true region long nullable true first name string
  • 如何使用 Laravel 管理 OAuth 刷新令牌?

    Socialiate 插件在 Laravel 中提供了 OAuth 的实现 但它的设计似乎主要是为了让他们不必在您自己的网站上创建用户帐户 我正在制作一个帮助管理他们的 Youtube 帐户的应用程序 这意味着身份验证请求的范围更广泛 很容
  • kinect C# 从保存的数据中绘制和移动骨架

    我想要做的是从保存的数据中绘制骨架并为其设置动画 就像我们可以对传感器流所做的那样 所以我有每个关节的 x y 和 z 值 我搜索了很多 但找不到任何可以帮助我的东西 我可以将数据转换为关节集合 将其与骨架关联 但是然后呢 我不知道如何将骨
  • 在 python 中向 csv 文件添加新列

    我正在尝试将一列添加到 csv 文件中 该文件组合了其他两列中的字符串 每当我尝试此操作时 我要么得到仅包含新列的输出 csv 要么得到包含所有原始数据而不是新列的输出 这是我到目前为止所拥有的 with open filename as
  • Vuejs上下文中chartjs的图表闪烁和getcontext错误

    您好 我正在尝试通过调用 API 使用 Chartjs 显示不同的图表 下面的代码显示了我如何格式化chart vue 图表 vue
  • Python 是否有与 Memcpy 等效的工具

    我正在尝试移植一些 C 代码 但由于我尝试使用 ctypes 不起作用 使用 memcpy 我真的陷入困境 我希望找到一种使用 memcpy 等效函数的 python 方法 有任何想法吗 这是我尝试移植的 C 代码示例 i l 5 t ht
  • 类型错误:预期的字符串或类似字节的对象 pandas 变量

    我有这样的数据集 import pandas as pd df pd DataFrame word abs e learning abs e learning abs e learning abs elearning 我想要得到 word
  • 在 Boost Test 框架中测试断言

    我使用 Boost Test 框架对我的 C 代码进行单元测试 并想知道是否可以测试函数是否会断言 是的 听起来有点奇怪 但请耐心听我说 我的许多函数在输入时检查输入参数 断言它们是否无效 对此进行测试将很有用 例如 void MyFunc
  • 如何在不使用 typeid/RTTI 的情况下确定实际对象的类型

    我有一个类层次结构 其中子类派生自父类 在一个地方 我需要将任何类型的对象存储 队列 到列表 list Parent 中 然后从该列表中检索对象 存储时 我存储的是指针 它指向最顶层的父类 检索时 我需要了解它实际上是哪个子对象 以便能够通