通过取消引用 boost::shared_ptr 找不到派生的 class' 方法

Derived class' method not found via dereferencing boost::shared_ptr

我们有:

声明:

class Derived : public Base
{
public:
  Derived();  // ctor
  ~Derived(); // dtor
  void MakeSomething();
private:
  // some private stuff
}

现在我们进入主线。这很好用:

// ...
Derived derived;
derived.MakeSomething();
// ...

相反,这行不通:

// ...
boost::shared_ptr< Base > derived(new Derived);
derived->MakeSomething();
// ...

编译器说:

Error: class "Base" has no member "MakeSomething"

我知道没有,其实我想调用Derived的方法!我在继承和指针方面缺少什么?

其他问题:

当您使用时:

boost::shared_ptr< Base > derived = ...;

您只能访问在 Basederived 中声明的函数。最简单的类比就是使用裸指针。

Base* ptr = new Derived;

即使ptr指向一个Derived,你也不能通过指针访问Derived的成员函数。

你的选择是(我能想到的):

  1. Base
  2. 中定义virtual个成员函数
  3. 创建指向 Derived
  4. 的指针
  5. 适当地使用 dynamic_cast 以获得指向 Derived 的指针。