在运行时 C++ 中使用派生类
Posted
技术标签:
【中文标题】在运行时 C++ 中使用派生类【英文标题】:using derived class in runtime c++ 【发布时间】:2015-04-26 00:44:18 【问题描述】:如果 mybase 类是派生类,这是在运行时检查。我需要在运行时使用 myBase(如 myBase.member1)从 myDerived.member1 调用成员变量。这里 myBase 是一个指针。如何做到这一点。
if(dynamic_cast<myDerived*>(myBase))
【问题讨论】:
dynamic_cast<>
不返回 bool
。它要么抛出异常,要么返回 myDerived *
指针。
dynamic_cast<myDerived*>(myBase)->member1
?
@Carlton 是的,它有效,谢谢!
@Carlton dynamic_cast
与引用 (dynamic_cast<Derived&>(base)
) 一起使用时会在失败时抛出 bad_cast
异常,这可能是 @user2225104 所引用的。
@JamesAdkison 哎呀,我什至没有考虑非指针类型。评论已删除。
【参考方案1】:
我会这样做:
myDerived* p_derived = nullptr;
p_derived = dynamic_cast<myDerived*>(myBase);
if (p_derived != nullptr)
//do something with p_derived->member1;
这样,您只需向dynamic_cast
打一次(可能很昂贵)电话。
【讨论】:
以上是关于在运行时 C++ 中使用派生类的主要内容,如果未能解决你的问题,请参考以下文章