相关疑难解决方法(0)

RTTI有多贵?

我知道使用RTTI会造成资源损失,但它有多大?我看起来只是说"RTTI很贵",但它们实际上都没有给出任何基准或定量数据来控制内存,处理器时间或速度.

那么,RTTI有多贵?我可能会在我只有4MB RAM的嵌入式系统上使用它,所以每一位都很重要.

编辑:根据S. Lott的回答,如果我包括我实际做的事情会更好. 我正在使用一个类传递不同长度的数据,并且可以执行不同的操作,因此仅使用虚函数很难做到这一点.似乎使用少数dynamic_casts可以通过允许不同的派生类通过不同的级别但仍然允许它们以完全不同的方式行动来解决这个问题.

根据我的理解,dynamic_cast使用RTTI,所以我想知道在有限的系统上使用它是多么可行.

c++ performance rtti

146
推荐指数
7
解决办法
7万
查看次数

什么可以使C++ RTTI不受欢迎?

纵观LLVM文件,他们提到,他们使用"RTTI的自定义窗体",这是他们的原因isa<>,cast<>dyn_cast<>模板功能.

通常,阅读一个库重新实现一种语言的一些基本功能是一种可怕的代码味道,只是邀请运行.但是,这是我们所说的LLVM:这些人正在研究C++编译器 C++运行时.如果他们不知道他们在做什么,我会非常沮丧,因为我更喜欢Mac OS附带clanggcc版本.

尽管如此,由于缺乏经验,我还是想知道正常RTTI的缺陷是什么.我知道它只适用于有v-table的类型,但只提出两个问题:

  • 既然你只需要一个虚拟方法来获得vtable,为什么它们不只是将方法标记为virtual?虚拟析构函数似乎很擅长这一点.
  • 如果他们的解决方案不使用常规RTTI,任何想法如何实现?

c++ rtti llvm

67
推荐指数
3
解决办法
1万
查看次数

避免使用dynamic_cast/RTTI

我最近正在为一个侧面项目(cpp-markdown图书馆,好奇的)编写一段C++代码,并遇到了一个我想要一些意见的编码问题.

cpp-markdown有一个名为的基类Token,它有许多子类.主要亚类中的两个是Container(其保持其它的集合Token或多个)和TextHolder(用作基类Token包含当然文本,S).

大多数处理都是通过虚函数处理的,但有些处理在单个函数中处理得更好.对于这一点,我结束了使用dynamic_cast,以向下转换从指针Token*到它的一个子类,所以我可以调用特定于子类和它的子类的功能.铸造不可能失败,因为代码能够通过虚函数(例如isUnmatchedOpenMarker)来判断何时需要这样的东西.

我还有两种方法可以解决这个问题:

  1. 创建我想要作为虚函数调用的所有函数Token,并为每个子类留下一个空体,除了需要处理它们的子类,或者......

  2. 创建一个虚函数,Token该函数将返回正确类型的指针,指向this在某些子类型上调用它时,如果在其他任何子类型上调用则返回空指针.基本上是我已经在那里使用的虚拟功能系统的扩展.

对我来说,第二种方法似乎比现有方法和第一种方法都要好.但我想知道其他有经验的C++开发人员对它的看法.或者我是否担心过多的琐事.:-)

c++ casting

8
推荐指数
2
解决办法
6753
查看次数

标签 统计

c++ ×3

rtti ×2

casting ×1

llvm ×1

performance ×1