【发布时间】:2013-01-14 05:48:12
【问题描述】:
我有一个typedef vector<Object*> ObjList; 的类型定义我还有一个函数vector<BigObject*>* ObjectBox::getBigObjectList();。 BigObject 继承自 Object
我想要做的是从getBigObjectList() 得到一个vector<BigObject*>* 并将其转换为vector<Object*>*,这是一个向上转换,这种类型被定义为ObjList 所以我基本上想转换它变成ObjList 类型
我尝试了两种方法,第一种是
ObjList *normalObjectList = (ObjList*) box->getBigObjectList();
这是编译后我从这篇文章 (When should static_cast, dynamic_cast, const_cast and reinterpret_cast be used?) 中读到的,它说 C 风格的转换很少需要,因为它可以被开发成 reinterpret-cast
然后我尝试使用static_cast,但是我得到一个错误说无效类型转换
ObjList *normalObjectList = static_cast<ObjList*> (box->ClipObjectInRect());
这也行不通
ObjList *normalObjectList = static_cast<vector<Object*>*> (box->ClipObjectInRect());
为什么这不起作用?这是因为static_cast 只能用于转换直接类(如Object 本身)而不是嵌套类(我只是在这里完全猜测)?这种情况我该怎么办?
【问题讨论】:
-
static_cast 不能转换为不相关的类型
-
@DenisErmolin 我不知道你所说的无关类型究竟是什么意思,因为它们是继承类型的向量并且使用
typedef明确定义。
标签: c++ casting typedef static-cast