将Base1指针转换为Base2指针(boost shared_ptr)

时间:2014-05-22 10:35:00

标签: c++ boost

我有两个基类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>

2 个答案:

答案 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());