关于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 的唯一性,以上,函数只适合研究学习。不建议,用在真正的项目里面