C++ RTTI 可行示例 [关闭]

2024-02-06

我熟悉 C++ RTTI,并且发现这个概念很有趣。

滥用它的方法仍然比正确使用它的方法多得多(我想到了 RTTI 开关的恐惧)。作为一名开发人员,我发现(并使用过)它只有两种可行的用途(更准确地说,一种半)。

您能否分享 RTTI 作为问题的可行解决方案的一些方法,包括示例代码/伪代码?

注意:目的是建立一个初级开发人员可以参考、批评和学习的可行示例存储库。

Edit:您会发现以下使用 C++ RTTI 的代码

// A has a virtual destructor (i.e. is polymorphic)
// B has a virtual destructor (i.e. is polymorphic)
// B does (or does not ... pick your poison) inherits from A

void doSomething(A * a)
{
   // typeid()::name() returns the "name" of the object (not portable)
   std::cout << "a is [" << typeid(*a).name() << "]"<< std::endl ;

   // the dynamic_cast of a pointer to another will return NULL is
   // the conversion is not possible
   if(B * b = dynamic_cast<B *>(a))
   {
      std::cout << "a is b" << std::endl ;
   }
   else
   {
      std::cout << "a is NOT b" << std::endl ;
   }
}

非循环访问者 http://www.objectmentor.com/resources/articles/acv.pdf(pdf) 是它的一个很好的用途。

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

C++ RTTI 可行示例 [关闭] 的相关文章

  • 编译时运算符

    有人可以列出 C 中可用的所有编译时运算符吗 C 中有两个运算符 无论操作数如何 它们的结果始终可以在编译时确定 它们是sizeof 1 and 2 当然 其他运算符的许多特殊用途可以在编译时解决 例如标准中列出的那些整数常量表达式 1 与
  • 我如何才能等待多个事情

    我正在使用 C 11 和 stl 线程编写一个线程安全队列 WaitAndPop 方法当前如下所示 我希望能够将一些内容传递给 WaitAndPop 来指示调用线程是否已被要求停止 如果 WaitAndPop 等待并返回队列的元素 则应返回
  • 为什么当实例化新的游戏对象时,它没有向它们添加标签? [复制]

    这个问题在这里已经有答案了 using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviou
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • 在 Windows 窗体中保存带有 Alpha 通道的单色位图会保存不同(错误)的颜色

    在 C NET 2 0 Windows 窗体 Visual Studio Express 2010 中 我保存由相同颜色组成的图像 Bitmap bitmap new Bitmap width height PixelFormat Form
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 重载<<的返回值

    include
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new

随机推荐

  • VS Code 在哪里存储打开文件的列表?

    我正在尝试在工作和家里同步 VS Code 实例 包括打开文件的列表 我知道有同步设置的扩展 但它们不包括打开文件 AFAIK 我不希望在运行实例下进行实时同步 但是如果我重启两台机器并在它们上启动代码 我希望它们相同 目前 我在 OneD
  • HAML 和 Ruby 循环以及 UL 不起作用

    我试图让这个简单的列表正常工作 但是 ul 正在关闭 并且没有将 li 元素包含在循环中 我是否缺少一个简单的方法来做到这一点 ul nav nav tabs nav stacked courses each do c li link to
  • 将数组作为单独的值传递给 params

    我正在调用一个与以下形式相同的函数string format其中第一个参数是字符串 其余参数是替换值 我在变量中有字符串 在数组中有替换值 给定数组中任意数量的对象 如何调用此函数 简单地传入数组作为最后一个参数是行不通的 Use the
  • 亚马逊 Lambda 到 Firebase

    当我尝试在 Lambda Node js 4 3 中运行此模块时 出现 找不到模块 firebase var Firebase require firebase 当我尝试上传包含 node modules firebase 的压缩包时 也会
  • 将“%>%”与“lm”和“rbind”一起使用

    我有一个数据框Z看起来像 t x y d 0 1 2 1 1 2 3 1 2 3 4 1 0 1 2 2 1 2 3 2 2 3 4 2 with d是一个因子列 我知道想要拟合线性模型lm to y over t对于两个因素d并将其作为新
  • 如何处理“无法将代码块解析为 Rust 代码”rustdoc 警告?

    我正在写一些 Rust 文档示例 正在编译 rust macro use extern crate But cargo doc给我这个 不正确 警告 warning could not parse code block as Rust co
  • 如何使用 FK 设置集合属性?

    我有一个Business and a Category model Each Business有很多Categories通过公开的集合 Category是无视Business实体 现在这是我的控制器操作 HttpPost ValidateA
  • 这是关闭 fork 上的套接字描述符的正确方法吗?

    考虑这段代码 socket fd start server port while 1 new socket fd accept client socket fd int pid fork if pid 0 I am the child se
  • 我应该使用 WinForms 还是 WPF 来使用网络摄像头拍照?

    我们有一个 Logitech 网络摄像头 我们希望将其与 NET 一起使用 它需要识别设备并能够拍照 我们刚刚安装了 VS 2008 我想知道 Microsoft 是否通过 WPF Silverlight 等一些较新的东西使与设备的交互变得
  • 由于“私有”保护级别,func 无法访问

    我正在尝试使用 Swift 3 将我的项目从 Xcode 8 中的 iOS 8 迁移到 iOS 10 我遇到了一个错误 在我的扩展中我声明了一些文件私有函数 并且由于以下原因 这些函数中的方法无法访问私人保护级别 这是我收到错误的地方 ex
  • 配置 IDLE 以使用 Unicode

    如何让 IDLE 使用 UTF 8 作为 Python 文件的默认编码 IDLE 设置中没有 编码 选项 就放特别评论行 https docs python org 2 tutorial interpreter html highlight
  • setExpressCheckout 和 SSL/TLS 错误

    我正在尝试开发一个简单的应用程序 使用户能够通过 Paypal API 从网站购买服务 该应用程序使用 C 在 ASP NET 上运行 我在尝试与 Paypal API 进行合作方面运气不佳 我调用的方法是 SetExpressChecko
  • SQL Server JDBC 驱动程序比较

    目前我们使用jtds http jtds sourceforge net 用于连接到我们的 SQL Server 数据库 我一直理所当然地认为我们出于性能和可靠性原因而使用它 但是 它的使用早于我的就业日期 综上所述 我们现在正在考虑迁移到
  • Eclipse插件开发问题

    我正在编写一个 Eclipse 插件 并且项目环境配置正确 我相信 我能够编译解决方案 而不会出现任何编译时错误 以下是在调试解决方案时引发异常的代码片段 我确信所有必需的插件和外部 jar 都已正确配置 我已经尝试了用户在互联网上建议的几
  • InputMethodManager 持有对 tabhost 的引用 - 内存泄漏 - OOM 错误

    查看层次结构如下TabActivity gt ActivityGroups gt Activities Using MAT我找到TabWidget被引用TabHost这是由引用的InputMethodManager hence TabWid
  • Visual Studio 2015 中“无法引用默认构造函数”

    我在 Visual Studio 2015 中遇到一个非常奇怪的错误消息 以下精简代码 struct A A int val 0 x val int x 0 struct B A static int y int B y 1 struct
  • plv8 的缺点或限制?

    我正在使用 PLV8 为 PostgreSQL 编写触发器和存储过程 到目前为止 我还没有真正看到与 PLPGSQL 相比的缺点 特别是如果使用 JSON 它似乎比 PLPGSQL 更智能 使用 PLV8 是否有已知的缺点或限制 PLV8
  • jquery .on() 只工作一次

    我有一个包含多个复选框输入的表
  • 当存在多个实现时,优先考虑容器内的 OSGi 服务选择

    我正在玩 OSGi 并且有一些捆绑包 捆绑包 A 和 B 都包含实现单个接口的注册服务 第三个包 C 包括用于查找实现前面提到的接口的服务的代码 A 和 B 捆绑包具有不同的版本号 但 C 似乎从第一个启动的捆绑包中获取服务 我已经更改了启
  • C++ RTTI 可行示例 [关闭]

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