我有一堆派生类存储为共享指针,我想知道是否有任何方法可以从对象内部获取weak_ptr
对象?
我尝试过使用shared_from_this()
函数但问题是因为它是派生类,当我使基类继承自enable_shared_from_this
时,派生类调用shared_from_this()
它得到基类的shared_ptr
派生类我无法变成shared_ptr
派生类
有什么建议吗?
答案 0 :(得分:1)
使用CRTP你可以实现它:
system
如果您想拥有一个通用的非模板基类,您可以依赖双重调度等技术,如下例所示:
#include <memory>
template<typename T>
struct B: std::enable_shared_from_this<T> {};
struct D: B<D> {};
int main() {
std::shared_ptr<B<D>> b = std::make_shared<D>();
std::shared_ptr<D> d = b->shared_from_this();
std::weak_ptr<D> w = b->shared_from_this();
}
答案 1 :(得分:0)
正如@Torbjörn所说,使用dynamic_pointer_cast<Derived>(base_ptr)
解决了这个问题,因为它允许我在继承中转换shared_ptr
,这是不能直接允许的。