【发布时间】:2009-01-19 09:02:13
【问题描述】:
我想知道一个基类指针的运行时类型,我知道你可以使用dynamic_cast。 有没有更好的办法?
【问题讨论】:
我想知道一个基类指针的运行时类型,我知道你可以使用dynamic_cast。 有没有更好的办法?
【问题讨论】:
dynamic_cast 只会确认您的猜测,即使这样也不完美。如果 C 继承自 B 继承自 A,dynamic_cast<B*>((A*)&theC) 将起作用。 typeid 会给你实际的类型,但在某种程度上对任何事情都不是很有用。例如,您不能创建相同类型的新对象。
所以,剩下的 biq 问题就是您的真正目标是什么。在正确的 OO 设计中,您永远不需要知道可以从基类型派生的无限类型集。
【讨论】:
typeid 操作符就是这样做的。它会在恒定时间内为您返回对 type_info 对象的恒定引用。
还可以查看 devx.com 上的 Performance of typeid vs dynamic_cast<> 提示。
【讨论】: