检查 std::shared_ptr<> 的当前底层类型是否为 T
Check whether the current underlying type of a std::shared_ptr<> is T
我有一个存储基类的共享指针,如下所示:
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;
相关文章:
- 检查 std::shared_ptr<> 的当前底层类型是否为 T
- 检查函数返回类型是否与STL容器类型值相同
- 检查某些类型是否是模板类 std::optional 的实例化
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 检查一个类型是否直接派生自"enable if"上下文中的另一个类型(是其子类型)
- 如何检查模板类型是否可以从给定类型构造
- 用于检测函数类型是否为否的特征
- 了解类型是否可调用
- 通过引用传递参数;函数返回类型是否必须为 VOID?
- 键入特征以检查类型是否可从流和 MSVC 读取
- 从双精度转换为整数的显式类型是否始终检查整数溢出?
- 如何获取类型是否真正可移动可构造
- 在编译时检查类型是否为 std::basic_string<T> C++
- 在C++中,转换为simd类型是否有未定义的行为
- POD类型是否完全等同于琐碎的标准布局类型
- 聚合类型是否意味着它也是标准布局
- 有没有一种方法可以使用SFINAE来检测一个类型是否实现了给定的抽象基类
- 验证(使用 static_assert)元组类型是否遵循某种顺序(有状态编译时检查)
- 强制转换为不相关的引用类型是否违反严格的别名规则?
- 特征:从数组类型中获取标量类型是否记录?