我需要从
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(); }
};
我想你想要:
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();
}
};
相比后者,我更喜欢前者。前者不会创建如此混乱的继承树。