相关疑难解决方法(0)

避免使用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++ ×1

casting ×1