gpt4 book ai didi

c++ - 通过取消引用 boost::shared_ptr 找不到派生类的方法

转载 作者:行者123 更新时间:2023-11-30 01:46:47 25 4
gpt4 key购买 nike

我们有:

  • 基类 Base ;
  • 派生类 Derived .

声明:

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的方法!我在继承和指针方面缺少什么?

其他问题:

  • 我不能申报MakeSomething()虚拟 Base ,因为 Base属于我可以继承的第三方库;
  • 我还有其他类和方法需要通过 boost::shared_ptr< Base > ,我不能直接使用 boost::shared_ptr< Derived > ;
  • ...应避免静态转换?

最佳答案

当您使用时:

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

您只能通过derived 访问在Base 中声明的函数。最简单的类比是使用原始指针。

Base* ptr = new Derived;

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

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

  1. Base中定义virtual成员函数,
  2. 创建指向Derived 的指针,或者
  3. 适本地使用dynamic_cast 来获取指向Derived 的指针。

关于c++ - 通过取消引用 boost::shared_ptr 找不到派生类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32637278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com