c++ - std::is_convertible 用于 type_info

标签 c++ types casting c++11 typecast-operator

在 C++11 中,可以通过 using std::is_convertible<A, B> 确定类型 A 的变量是否可以隐式转换为类型 B .

如果你真的知道类型 A 和 B,这很有效,但我只有 type_infos。所以我正在寻找的是这样的功能:

bool myIsConvertible(const type_info& from, const type_info& to);

是否可以在 C++ 中实现类似的东西?如果是,怎么办?

最佳答案

在可移植的 C++ 中做你想做的事是不可能的。

可能如果您将自己限制在给定的平台上,则有可能获得部分答案。例如那些遵守 Itanium ABI 的平台将实现此功能:

extern "C" 
void* __dynamic_cast(const void *sub,
                     const abi::__class_type_info *src,
                     const abi::__class_type_info *dst,
                     std::ptrdiff_t src2dst_offset);

在此 ABI 中,abi::__class_type_info 是从 std::type_info 派生的类型,所有 std::程序中的 type_info 具有从 std::type_info 派生的动态类型(abi::__class_type_info 只是一个示例)。

使用此 ABI 可以构建一个工具,该工具将在给定其 std::type_info 的情况下(在运行时)导航任何类型的继承层次结构。在这样做的过程中,您可以确定两个 std::type_info 是否表示可以是 dynamic_cast 或什至 static_cast 的两种类型。

请注意,这样的解决方案不会考虑使用转换构造函数或转换运算符在类型之间进行转换。即使该限制是可以接受的,我也不推荐这条路线。这不是一个容易的项目,而且很容易出错。但这可能是您的 C++ 实现实现 dynamic_cast 的方式,所以这显然不是不可能的。

关于c++ - std::is_convertible 用于 type_info,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10502423/

相关文章:

c++ - G++ 未找到,我已经尝试了 3 种不同的编译器

C++从main()通过类函数传递指针

c++ - 为具有特定成员变量值的类创建不同类型

haskell - 对类型索引 GADT 中的 forall 感到“有点”困惑

c++11 - 将智能指针转换为基类

PHP 将数组转换为对象

c++ - Ceil 函数 : how can we implement it ourselves?

c++ - 省略数据类型(例如 "unsigned"而不是 "unsigned int")

java - 将整数对象转换为原始类型时遇到问题

c++ - 修改虚函数中的基类