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

Converting Base1 pointer to Base2 pointer ( boost shared_ptr)

本文关键字:指针 shared ptr boost Base2 Base1 转换      更新时间:2023-10-16

我有两个基类Base1和Base2。都有一个纯虚函数。另一个名为Derived的类通过提供implementation

实现了上述两个类。
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>

您希望使用dynamic_cast。对于dynamic_cast shared_ptr s,使用std::dynamic_pointer_cast

std::shared_ptr<Base2> spBase2 = std::dynamic_pointer_cast<Base2>(spBase1);

我相对确定这在boost中是相同的(将std::替换为boost::),您可以自己查找。使用std代替boost

使用dynamic_pointer_cast共享指针

std::shared_ptr<Base2> spfoo = std::dynamic_pointer_cast<Base2>(spBase1);

指针

使用dynamic_cast
base1*  ptr = dynamic_cast<Base1*>(spBase1.get());