我正在使用自制的shared_from_this类(CEnableSharedFromThis),因为我在C++ 03下,因此无法在项目中使用boost。
我有一个看起来像这样的A类:
class A : virtual CEnableSharedFromThis<A>
{
...
}
像这样的B类:
class B : public A, virtual CEnableSharedFromThis<A>
{
void foo()
{
Poco::SharedPtr<B> b(sharedFromthis());
}
}
我看到有些人的方法含糊不清。因此,我使用虚拟继承,但没有此错误。
但是我有一个新的我不能放弃的foo()方法。
编译器说:
所以我尝试下面的foo()方法:
void foo()
{
Poco::SharedPtr<B> b(B::sharedFromthis());
}
但这并没有改变。
任何想法 ?
编辑:
按照您的要求,我删除了B的CEnableSharedFromThis的继承,并像这样更改foo()函数:
class B : public A
{
void foo()
{
Poco::SharedPtr<B> b(sharedFromthis().cast<B>());
}
}
最佳答案
覆盖它并改用static_pointer_cast。
class B : public A
{
Poco::SharedPtr<B> sharedFromThis() {
return Poco::StaticPointerCast<B>(CEnableSharedFromThis<A>::sharedFromThis());
}
void foo()
{
Poco::SharedPtr<B> b(sharedFromthis());
}
}
假设存在与
Poco::StaticPointerCast
类似的std::static_pointer_cast
。关于c++ - 无法通过shared_from_this的继承进行编译,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30805150/