C++dynamic_cast vs 在静态枚举中存储对象类型?

2024-05-25

我正在为一个框架开发一个大的类层次结构,完成后将需要大量的类型转换。

我的问题是,放入一个使用枚举来存储层次结构中所有对象类型的静态成员是多么愚蠢的想法。让每个类的成员都是静态的不会增加实例化对象的大小,并且会提供一种(可能)比dynamic_cast更快的方法来在运行时确定对象的类型。

至少这是基本的想法。这种方法是否足够,是否有任何潜在的缺陷?


我不知道如何从对象之间共享的静态变量确定每个对象的类型。除非你有一些为每个类重写的虚函数,但你根本不需要静态变量,只需执行以下操作:

struct Base
{
   virtual int type() = 0;
};

struct Derived1 : public Base
{
   virtual int type() { return 1; }
};

struct Derived2 : public Base
{
   virtual int type() { return 2; }
};

不是最快的解决方案,但比dynamic_cast or typeid.

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

C++dynamic_cast vs 在静态枚举中存储对象类型? 的相关文章

随机推荐

  • 为什么 App Store Connect 中的崩溃报告有时不提供崩溃文件?

    我们的应用程序从 TestFlight 用户那里获取崩溃报告 并将这些报告发送到Crash FeedbackApp Store Connect 页面 通常 当您下载崩溃反馈时 我们会提供feedback json文件 其中包含一些元数据和c
  • LINQ-To-SQL 如何防止 SQL 注入?

    我目前正在使用 C 和 LINQ TO SQL 做一个项目 这个项目将安全性作为高优先级 所以显然我想防止 SQL 注入 我用谷歌搜索了此事 但 没有发现任何有用的信息 微软自己的常见问题解答告诉我 由于 LINQ 处理参数的方式 注入不会
  • django-rest-swagger 与模型序列化器不能很好地配合吗?

    我已经离开了 django rest swagger 的文档github页面 https github com marcgibbons django rest swagger 更具体地说 是 它是如何工作的 部分 它表明您可以为其余 api
  • 如何为 3D 网格线着色

    我正在寻找一种方法来更改 3D 绘图网格线的颜色 但无法找到一种干净且简单的方法来实现此目的 我找到的唯一答案是here https stackoverflow com questions 31684448 how to color a s
  • scss bootstrap 4 覆盖地图

    我正在尝试使用 Bootstrap 4 进行 scss 但我不知道如何正确地覆盖变量 使用映射 自定义 scss Your variable overrides primary rgb 40 167 36 spacer 1 spacers
  • 如果从后台发送响应,则执行内容脚本中的函数

    对于我的 Chrome 扩展 我尝试将选定的文本发布到 PHP 网页 本网站已解决的问题 Chrome 扩展 如何捕获选定的文本并将其发送到网络服务 https stackoverflow com questions 2626859 chr
  • 如何在 while 循环中使用 fetch

    我的代码是这样的 var trueOrFalse true while trueOrFalse fetch some address then if someCondition trueOrFalse false 但我无法发出获取请求 看起
  • 我如何在 gmail 中向自己发送 json+ld schema.org 电子邮件

    gmail 最近宣布 schema org 支持应用内操作和一键操作 他们指出 人们可以通过从自己向自己发送电子邮件 即从 电子邮件受保护 cdn cgi l email protection to 电子邮件受保护 cdn cgi l em
  • C++20 概念 boolean-testable 之谜

    C 20引入了比较概念布尔可测试 https en cppreference com w cpp concepts boolean testable 但我注意到它的斜体和中间的连字符 表明它仅用于说明 并且因为没有所谓的std boolea
  • Rails current_path 助手?

    我正在开发具有以下路由条件的 Rails 3 2 应用程序 scope locale locale de en do resources categories only index show get newest index as newe
  • Android M 电子邮件完成

    如您所知 Android M 上的权限系统已更新 目前 我使用 GET ACCOUNTS 权限在用户登录 注册我的应用程序时自动完成用户电子邮件 final ArrayList
  • 我需要使用 VBA 将数据从 Excel 插入 SQL Server

    我需要插入test vba xlsx将数据写入 SQL Server 到特定数据库 Sub insertion Dim conn As ADODB Connection Dim rs As ADODB Recordset Dim sConn
  • ASP.NET/Silverlight 控制 USB 设备

    我想使用某种 USB 设备 例如闪光灯 提醒用户有新消息 是否可以从 ASP NET 或 Silverlight 控制 USB 设备 您可以在网页中使用自定义 ActiveX 组件和一些 javascript 来完成此操作 或者 您可以使用
  • 免费/开放图书馆查找相似图像

    我正在寻找稳定且成熟的免费 开源库 允许比较两个图像 我找到了这个 但我想知道你是否使用更好的 相似图像查找器 C 和 RGB 中的 NET 图像处理 http similarimagesfinder codeplex com 我做的很简单
  • 如何获取dart中当前和调用函数的名称?

    C has System Reflection MethodBase GetCurrentMethod Name Dart 是否有类似的东西 但返回当前正在运行的函数以及调用当前运行函数的函数的名称的结果 我编写了一个简单的类 它提供当前函
  • Selenium 打开本地文件

    我正在尝试使用 Firefox Selenium 实例作为图像的基本幻灯片 我的想法是我会开一个webdriver and driver get 来自本地目录的文件 当我运行以下命令时 我收到错误 selenium common excep
  • 页面中的所有 css 类都使用 js

    我希望能够获取页面上所有CSS文件的所有类名 是否存在任何现有的可能性 或者我必须自己阅读并解析它 浏览器没有api吗 也许是重复的请求 如何使用 JavaScript 读取 CSS 规则值 https stackoverflow com
  • FxCop 1.36 消失了 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我只是想下载 FxCop 1 36 但我在互联网上找不到它 几天前 FxCop 10 推出了 Windows 7 版 但我需要旧版本 该文件在 MS
  • 错误:子进程失败,退出,错误号为 51 MongoDB

    重新启动 MongoDB 时出现此错误 我正在使用 Mongo 3 2 4 并在新机器上进行此设置 Starting mongod about to fork child process waiting until server is re
  • C++dynamic_cast vs 在静态枚举中存储对象类型?

    我正在为一个框架开发一个大的类层次结构 完成后将需要大量的类型转换 我的问题是 放入一个使用枚举来存储层次结构中所有对象类型的静态成员是多么愚蠢的想法 让每个类的成员都是静态的不会增加实例化对象的大小 并且会提供一种 可能 比dynamic