有没有办法在运行时在 C++ 中获取基类名称?

Posted

技术标签:

【中文标题】有没有办法在运行时在 C++ 中获取基类名称?【英文标题】:Is there a way to get a base class name in C++ at runtime? 【发布时间】:2011-05-19 10:38:34 【问题描述】:

假设启用了 RTTI,您可以在运行时使用 typeid(this).name() 获取当前类名。

我希望能够获得“this”的基类名称。那可能吗?我没有使用多重继承,以防万一。

【问题讨论】:

你为什么需要它?通常,当您发现自己需要 RTTI 时,这表明存在设计问题。 我想要这个的原因是使用遗留系统框架中的现有调用提供调试输出。代码中提供了类名和基类名,但涉及大约 300 个类,所以我一直在寻找可以在全局搜索和替换中使用的东西。这是针对客户要求的;我本来可以用完全不同的方式解决这个问题,但是与旧软件的二进制兼容性限制了我的解决方案。 【参考方案1】:

另外,我认为你不能指望typeid(this).name() 给你一个类名(AFAIK 要返回的确切值是实现定义的)。

【讨论】:

【参考方案2】:

不,先生。对不起。并且您以这种方式获取类名的方法取决于实现。在我的实现中,我得到了错误的名称。

【讨论】:

【参考方案3】:

无法可靠地检索信息,因为它不能可靠地存储在任何地方,反过来,因为 C++ 的理念是除非你明确要求,否则不会给你东西。

【讨论】:

【参考方案4】:

不,它不是,你需要这个功能的原因是可疑的:)

【讨论】:

来吧,对于 OP 想要实现的目标,可能会有一些晦涩难懂的用例。 我想要这个的原因是使用遗留系统框架中的现有调用提供调试输出。代码中提供了类名和基类名,但涉及到大约 300 个类,所以我一直在寻找可以在全局搜索和替换中使用的东西。

以上是关于有没有办法在运行时在 C++ 中获取基类名称?的主要内容,如果未能解决你的问题,请参考以下文章

C++获取基类指针所指子类对象的类名

OBIEE有没有办法在我们运行仪表板时在excel中提供提示功能,就像在仪表板中一样

使用JsonTypeInfo从Jackson序列化中删除基类名称

在运行时在 Java 代码中运行 flyway 迁移

如何在运行时在程序创建的.sys文件上设置文件版本

在运行时在 c++ Windows API 中调整窗口大小?