C++来自*this、父类和派生类的shared_ptr

问题描述 投票:0回答:1

我需要从

shared_ptr
得到一个
this
,这对于家长班来说很容易。但是当你开始从这个类中派生时 - 问题就更困难了。

您收到此错误:

 member 'shared_from_this' found in multiple base classes of different types
        return this->shared_from_this();                     ^
note: member found by ambiguous name lookup

我应该如何处理这个问题?

#include <memory>

struct AAA : std::enable_shared_from_this<AAA>
{
    auto getA() -> std::shared_ptr<AAA> { return this->shared_from_this(); }
};

struct BBB : AAA, std::enable_shared_from_this<BBB>
{
    auto getB() -> std::shared_ptr<BBB> { return this->shared_from_this(); }
};
c++ shared-ptr
1个回答
0
投票

我想你想要:

struct BBB : AAA
{
    auto getB() -> std::shared_ptr<BBB> { 
        auto spA = getA();
        auto spB = std::static_pointer_cast<BBB>(spA);
        return spB;
    }
};

或者这个:

struct BBB : AAA, std::enable_shared_from_this<BBB>
{
    auto getB() -> std::shared_ptr<BBB> { 
        std::enable_shared_from_this<BBB>* sftB = this;
        return sftB->shared_from_this();
    }
};

相比后者,我更喜欢前者。前者不会创建如此混乱的继承树。

© www.soinside.com 2019 - 2024. All rights reserved.