菜鸟笔记
提升您的技术认知

std::dynamic_pointer_cast细节用法

关于std::dynamic_pointer_cast的使用,只适合具有继承关系的使用,比如

class D:public B

{

};

如果,B的指针指向D时,想用D里面的函数,而在B里面没有时,我们就会使用std::dynamic_pointer_cast函数,但是,这只适合shared_ptr,不适合std::unique_ptr,因为c++标准库根本没实现。所以要自己实现一个。

实现细节:

template <typename To, typename From, typename Deleter>
std::unique_ptr<To, Deleter> dynamic_unique_cast(std::unique_ptr<From, Deleter>&& p) {
    if (To* cast = dynamic_cast<To*>(p.get()))
    {
        std::unique_ptr<To, Deleter> result(cast, std::move(p.get_deleter()));
        p.release();
        return result;
    }
    return std::unique_ptr<To, Deleter>(nullptr); // or throw std::bad_cast() if you prefer
}

总结:估计c++标准库不去实现,是可能违背了std::unique_ptr 的唯一性,以上,函数只适合研究学习。不建议,用在真正的项目里面