【问题标题】:what is the best way to check the type of base class pointer?检查基类指针类型的最佳方法是什么?
【发布时间】:2009-01-19 09:02:13
【问题描述】:

我想知道一个基类指针的运行时类型,我知道你可以使用dynamic_cast。 有没有更好的办法?

【问题讨论】:

    标签: c++ pointers


    【解决方案1】:

    dynamic_cast 只会确认您的猜测,即使这样也不完美。如果 C 继承自 B 继承自 A,dynamic_cast<B*>((A*)&theC) 将起作用。 typeid 会给你实际的类型,但在某种程度上对任何事情都不是很有用。例如,您不能创建相同类型的新对象。

    所以,剩下的 biq 问题就是您的真正目标是什么。在正确的 OO 设计中,您永远不需要知道可以从基类型派生的无限类型集。

    【讨论】:

    • 我必须同意:多态应该减少检查对象类型的需要(除非您正在编写调试代码......)+1
    • 同意。如果你正确地使用了多态,你永远不应该关心对象的实际类型。
    【解决方案2】:

    typeid 操作符就是这样做的。它会在恒定时间内为您返回对 type_info 对象的恒定引用。

    还可以查看 devx.com 上的 Performance of typeid vs dynamic_cast<> 提示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-17
      • 2023-04-02
      • 2010-11-23
      • 1970-01-01
      • 2010-09-27
      • 1970-01-01
      • 1970-01-01
      • 2020-12-20
      相关资源
      最近更新 更多