使用static_cast进行无效的类型转换,我应该使用哪种正确的转换?

ryf*_*059 1 c++ casting typedef static-cast

我有一个类型定义typedef vector<Object*> ObjList;我也有一个功能vector<BigObject*>* ObjectBox::getBigObjectList();.BigObject从...开始Object

我想要做的是得到一个vector<BigObject*>*来自getBigObjectList()并将其转换为vector<Object*>*,这是一个向上铸造,而这个类型被定义为ObjList,所以我基本上是想以CONVER变成一只ObjList类型

我试过两种方式,第一种是

ObjList *normalObjectList = (ObjList*) box->getBigObjectList();
Run Code Online (Sandbox Code Playgroud)

这个编译,我从这篇文章中读到(什么时候应该使用static_cast,dynamic_cast,const_cast和reinterpret_cast?),这说C风格的转换很少需​​要,因为它可以发展成为reinterpret-cast

然后我尝试使用static_cast,但我收到一个错误,说无效的类型转换

ObjList *normalObjectList = static_cast<ObjList*> (box->ClipObjectInRect());
Run Code Online (Sandbox Code Playgroud)

这也不行

ObjList *normalObjectList = static_cast<vector<Object*>*> (box->ClipObjectInRect());
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用?这是因为static_cast只能用于投射直接类(如Object自身)而不是嵌套类(我只是在这里猜测)?在这种情况下我该怎么办?

Dra*_*gos 12

如果编译器不知道(或假装不知道)类型之间的关系,静态强制转换也将失败.如果您的继承未在两者之间声明为公共,则编译器会将它们视为不相关的类型,并为您提供相同的神秘警告.

这只是咬我,所以以为我会分享.