我想编写一个方法,其中Base
对象指针将作为参数传递,并且在方法内部它将被转换为派生对象指针。
void func( const Base* const obj){
Derived* der = dynamic_cast<Derived*>(obj);
}
但它显示错误,因为动态强制转换无法抛弃const说明符。但是我不明白为什么必须在这里删除const
说明符,我所做的只是创建一个派生的指针,该指针指向 base 指针。我也尝试了const Derived* const der = dynamic_cast<Derived*>(obj);
,但没有结果。
将参数作为const
传递非常重要。我怎样才能做到这一点?我是否必须以丑陋的方式首先应用const_cast
然后dynamic_cast
?有没有更好的方法?
答案 0 :(得分:7)
你丢弃了const
,因为你没有这样做:
const Derived* der = dynamic_cast<const Derived*>(obj);
如果您确实需要Derived*
,那么您需要
Derived* der = dynamic_cast<Derived*>(const_cast<ObjType*>(obj));
答案 1 :(得分:6)
你不能做的是删除 const
限定符dynamic_cast
。如果类型是多态的(至少有一个虚函数),你应该能够:
const Derived *der = dynamic_cast<const Derived*>(obj);