【发布时间】:2009-02-24 22:59:47
【问题描述】:
我最近正在为一个业余项目(cpp-markdown library,出于好奇)编写一段 C++ 代码,并遇到了一个我想提出一些意见的编码问题。
cpp-markdown 有一个名为Token 的基类,它有许多子类。其中两个主要子类是Container(它包含其他Tokens 的集合)和TextHolder(用作Tokens 的基类,当然包含文本)。
大部分处理是通过虚函数处理的,但其中一些最好在单个函数中处理。为此,我最终使用dynamic_cast 将指针从Token* 向下转换为其子类之一,因此我可以调用特定于子类及其子类的函数。强制转换不可能失败,因为代码能够通过虚函数(例如isUnmatchedOpenMarker)判断何时需要这种东西。
我可以看到其他两种方法来处理这个问题:
创建 所有 我想调用的函数作为
Token的虚函数,并为每个子类留下一个空的主体,除了需要的子类处理它们,或者...在
Token中创建一个虚函数,当在某些子类型上调用它时,它将返回指向this的正确类型的指针,如果在其他任何东西上调用它,则返回一个空指针。基本上是我已经在那里使用的虚拟功能系统的扩展。
对我来说,第二种方法似乎比现有方法和第一种方法都好。但我想知道其他有经验的 C++ 开发人员对此的看法。或者我是否过于担心琐事。 :-)
【问题讨论】: