什么是动态铸造的"好用"例子?

Oys*_*erD 23 c++ dynamic-cast casting rtti

我们经常听到/读到应该避免动态铸造.根据你的说法,我想知道它的"好用"例子是什么?

编辑:

是的,我知道那个其他线程:确实在阅读那里的第一个答案时,我问了我的问题!

Mar*_*som 9

这个最近的线程给出了一个它派上用场的例子.有一个基础的Shape类和从它派生的Circle和Rectangle类.在测试相等性时,很明显Circle不能等于Rectangle,尝试比较它们将是一场灾难.在迭代指向Shapes的指针集合时,dynamic_cast会执行双重任务,告诉您形状是否具有可比性,并为您提供正确的对象以进行比较.

矢量迭代器不是dereferencable


DrP*_*zza 0

我当前的玩具项目使用了两次dynamic_cast;一次是为了解决 C++ 中缺乏多重分派的问题(这是一个访问者风格的系统,可以使用多重分派而不是动态类型转换),一次是为了特殊情况下的特定子类型。

在我看来,这两者都是可以接受的,尽管前者至少源于语言缺陷。事实上,我认为这可能是一种常见的情况;大多数dynamic_cast(以及一般的许多“设计模式”)都是针对特定语言缺陷的解决方法,而不是目标。