在 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/