gpt4 book ai didi

c++ - 将 std::is_convertible 与 std::type_index 一起使用

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:03:11 28 4
gpt4 key购买 nike

我有一个 vector std::type_index ,表示特定节点具有的特征类型。我正在实现一个函数来检查节点是否支持特定类型。它看起来像这样:

std::vector<std::type_index> traits;

...

template <typename T>
bool hasTrait() {
return std::find(traits.begin(), traits.end(), typeid(T)) != traits.end();
}

但是,如果输入 T,这将不起作用是特征中某些基本类型的派生类型。为了解决这个问题,我想使用 std::is_convertible .

但是,我只能访问 std::type_index的类型,所以我不能那样做。需要这样的东西:std::is_convertible<traitTypeIndex::type, T>

最佳答案

首先我要提到的是 std::is_convertible 肯定是不可能的。与 type_traits 中的所有其他内容一样,std::is_convertible 是纯粹的编译时内容。但是您希望它在运行时为您提供一些运行时参数(即 type_index)的答案。

第二个问题是这个检查是否可以针对任意多态类型实现(“任意”是指您没有任何特定的设计时或运行时信息)。我认为这并非不可能,因为我们在 C++ 中的整个运行时反射是 dynamic_cast(当 RTTI 开启时)。然而,即使在 dynamic_cast 中,我们也有一个半动态参数(指针或引用)和一个静态参数(我们不想转换成的类型)。我写 semi-dynamic 是因为它需要是某个特定类型的指针或引用,它不能绝对类型删除参数(如 void*)。我相信,要动态检查两种类型中的一种是否是另一种类型的继承者,我们需要来自运行时的更多支持。

关于c++ - 将 std::is_convertible 与 std::type_index 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55720662/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com