【发布时间】:2009-10-23 00:53:28
【问题描述】:
LLVM 有它自己的手动替代 RTTI,它比内置 RTTI 提高了速度,并允许动态转换为没有 vtable 的类 (dyn_cast)。但是,它仍然可以完全按照 dynamic_cast<> 的使用方式使用,尽管它确实允许它与更多类一起使用。
dyn_cast<> template documentation
LLVM 是一个享有盛誉的 C++ 项目,因此这似乎与常见的说法背道而驰,即过多的动态转换是糟糕设计的标志,也称为代码异味。与标准的dynamic_cast 相比,性能更好的动态转换肯定不会改善其在设计中的使用。那么谁在这里呢?是否存在大规模使用动态转换是 C++ 代码中一个不错的设计选择的情况? Google 在 LLVM 主干源代码中出现了 690 次这种动态转换。
【问题讨论】:
-
我认为它只是表明“有时,在大型软件项目中,您必须改变一些规则”。或者也许“编译器或与编译器相关的框架必须使用通常是坏主意的低级技巧”。这并不意味着我们可以就
dynamic_cast的使用得出任何结论一般 -
这似乎完全无视“规则”。我不会称 690 次事件违反规则。我看不出编译器或与编译器相关的框架有什么特别之处,这意味着它们可以打破设计信念。这里的动态转换对编译器的输出代码或输入代码没有影响,它只是设计的一部分。我可以继续你的论点,说任何足够大或足够复杂的软件都可以无视设计规则,这严重质疑这种设计建议以避免
dynamic_cast。
标签: c++ design-patterns llvm dynamic-cast