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

标签 c++ boost

我有两个基类 Base1 和 Base2。两者都有 1 个纯虚函数。 另一个称为 Derived 的类通过提供实现来实现上述两个类

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

如何转换 spBase1boost::shared_ptr<Base2>安全吗?

最佳答案

您想使用dynamic_cast。对于dynamic_cast shared_ptr,使用std::dynamic_pointer_cast .

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

这个我比较确定boost里面也是一样的(把std::换成boost::),大家可以自己找找看。如果可用,请使用 std 而不是 boost。

关于c++ - 将 Base1 指针转换为 Base2 指针(boost shared_ptr),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23804382/

相关文章:

c++ - 检测到堆损坏

c++ - 线程安全的 C++ 堆栈

c++ - 在 Linux 上将文件写入磁盘的最快方法

c++ - 如何在 Windows 中注册 COM(组件对象模型)? (用于图标覆盖处理程序)

c++ - 删除指向对象的指针会导致 Break

c++ - 为什么 C++ 标准库不对异常使用虚拟继承?

c++ - 错误 : Vector subscript out of range. 第 1201 行

c++ - 使用前导和尾随空格 boost spirit 解析字符串

c++ - 使用 regex_search

c++ - 使用 boost::bind 将自由函数 native 回调替换为成员函数