C++ std::类型信息是否可转换
在C++11中,可以通过使用std::is_convertible来确定类型a的变量是否可以隐式转换为类型BC++ std::类型信息是否可转换,c++,types,casting,c++11,typecast-operator,C++,Types,Casting,C++11,Typecast Operator,在C++11中,可以通过使用std::is_convertible来确定类型a的变量是否可以隐式转换为类型B 如果你真的知道A型和B型的话,这个方法很有效,但是我只有类型信息。所以我要找的是这样一个函数: bool myIsConvertible(const type_info& from, const type_info& to); 在C++中实现类似的东西是可能的吗?如果是这样,那么,< p>我猜这是在你知道变量的类型,你可以使用C++中的Type ID操作符知道的。p>
如果你真的知道A型和B型的话,这个方法很有效,但是我只有类型信息。所以我要找的是这样一个函数:
bool myIsConvertible(const type_info& from, const type_info& to);
<>在C++中实现类似的东西是可能的吗?如果是这样,那么,< p>我猜这是在你知道变量的类型,你可以使用C++中的Type ID操作符知道的。p>
Derived* pd = new Derived;
Base* pb = pd;
cout << typeid( pb ).name() << endl; //prints "class Base *"
cout << typeid( *pb ).name() << endl; //prints "class Derived"
cout << typeid( pd ).name() << endl; //prints "class Derived *"
派生*pd=新派生;
碱基*pb=pd;
在便携式C++中,不可能做到你想要的。
如果将自己限制在给定的平台上,则可能获得部分答案。例如,遵守的平台将实现此功能:
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::uuu class_type_info
是从std::type_info
派生的类型,程序中的所有std::type_info
都有一个从std::type_info
派生的动态类型(ABI::u class_type_info
只是一个例子)
使用这个ABI,可以构建一个工具来导航任何类型的继承层次结构(在运行时),给定它的std::type_info
。通过这样做,您可以确定两个std::type_info
s是否表示两种类型,它们可以是dynamic_cast
甚至是static_cast
请注意,这样的解决方案不会考虑使用转换构造函数或转换运算符在类型之间进行转换。即使这个限制可以接受,我也不推荐这条路线。这不是一个容易的项目,而且很容易出错。但是这可能是C++实现了如何实现代码> DycimixCase,所以显然不是不可能的。但真正的问题是,你会用这样一个函数做什么?还有,为什么你只有type\u info
s?“如果你真的知道类型a和B,这很有效”。好吧,但是你为什么不知道类型呢?我想我们需要缩小范围:你试图解决的问题是什么让你一开始就陷入困境?如果你不知道a和B,但知道它们是可转换的,你仍然不能进行转换,那么你为什么要这样要求?