检查 std::shared_ptr<> 的当前底层类型是否为 T

Check whether the current underlying type of a std::shared_ptr<> is T

本文关键字:类型 是否 gt shared std ptr 检查 lt      更新时间:2023-10-16

我有一个存储基类的共享指针,如下所示:

std::shared_ptr<Base> baseClassPointer;

如何检查它当前是否持有SuperClassA的实例?其中:

public class SuperClassA : public Base {} // There can be many other superclasses

我试过下面这样的东西,但显然不起作用:

std::is_same<SuperClassA, decltype(baseClassPointer->get())>::value;

对于那些有兴趣了解我是如何做到这一点的人,这里是:

bool same = typeid(SuperClassA) == typeid(*baseClassPointer->get());

或者:

bool same = std::dynamic_pointer_cast<SuperClassA>(baseClassPointer).use_count() > 0;

甚至更好(性能方面(:

bool same = dynamic_cast<SuperClassA*>(baseClassPointer->get()) != nullptr;