c++ - 显式类型标识符与 RTTI

标签 c++ inheritance rtti

与 RTTI 相比,使用您自己的类型标识符有什么优势吗?

例如

class A { virtual int mytype() = 0; };
class B : public A { int mytype() {return 1;} };
class C : public A { int mytype() {return 2;} };

可以更快吗?更少的开销?还是应该在这种情况下始终使用 RTTI?

最佳答案

测试之前,不要假设 RTTI 的开销会比您的解决方案多/少。

您应该尝试这两种解决方案并衡量性能以获得可靠的答案。

几年前我实际上问过自己同样的问题,最后我添加了一个成员变量来“固定”类型测试,就像您所做的那样。结果我的代码被愚蠢的测试不必要地弄乱了,而一些 dynamic_cast<>会做同样的工作(事实上,做得更好)。

我重构了代码以使用 dynamic_cast<>从那时起,我就不会再回去了。

作为脚注:如果你的类是多态的,那么无论如何你已经为此“付出了代价”,所以只需使用 dynamic_cast<> 即可。 .

关于c++ - 显式类型标识符与 RTTI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6124616/

相关文章:

python - 我应该#include boost/Python.hpp 还是 boost/python.hpp?

c# - 如何从 C# 代码在 Visual Studio 中创建 native DLL?

python - 您将如何继承并覆盖 Django 模型类以创建 listOfStringsField?

java - 我需要帮助以一种方法将 child 作为父亲传递 [Java]

Delphi RTTI故障: GetPropInfo returns nil with {$METHODINFO ON}?

c++ - 如何在linux中检查系统时间是否有效

c++ - 为 iOS 编译时通过 Makefile 加载 libxml 的正确方法

c++ - 使用虚空函数但没有编译错误的类中的运行时错误

delphi - 如何检测 Delphi 类是否具有虚拟构造函数?

Delphi RTTI GetMethod ('create')不工作