我有两个基类Base1和Base2。两者都有1个纯虚函数。 另一个名为Derived的类通过提供implmentation来实现上面的两个类
class Base1
{
public:
virtual void Base1Method()=0;
};
class Base2
{
public:
virtual void Base2Method()=0;
};
class Derived: public Base1, public Base2
{
public:
Derived(){}
void Base1Method()
{
//IMPL
}
void Base2Method()
{
//IMPL
}
};
现在,
我有boost::shared_ptr<Base1> spBase1 = new Derived();
如何安全地将spBase1
转换为boost::shared_ptr<Base2>
?
答案 0 :(得分:4)
您想使用dynamic_cast
。要dynamic_cast
shared_ptr
,请使用std::dynamic_pointer_cast
。
std::shared_ptr<Base2> spBase2 = std::dynamic_pointer_cast<Base2>(spBase1);
我相对肯定这在升级中是相同的(用std::
替换boost::
),你可以自己寻找。如果可用,请使用std
代替提升。
答案 1 :(得分:4)
将dynamic_pointer_cast用于共享指针
std::shared_ptr<Base2> spfoo = std::dynamic_pointer_cast<Base2>(spBase1);
将dynamic_cast用于指针
base1* ptr = dynamic_cast<Base1*>(spBase1.get());