将std :: list <x>强制转换为std :: list <y>

时间:2018-07-19 17:39:07

标签: c++

这是我的情况。我有X和Y两个班级。

X继承自Y。

class X : public Y

我有一个这样定义的方法:

void getSomethingFromList(std::list<Y> list);

如何像这样将X对象列表传递给此方法?

std::list<X> xList;
getSomethingFromList((std::list<Y>)xList);

2 个答案:

答案 0 :(得分:0)

唯一的方法是使用(唯一)指针列表,而不是对象本身。显然,这并不理想,但这是我们为虚拟化付出的代价。就您而言,

loginService.userWatcher.and.returnValue(Observable.of('test'));

答案 1 :(得分:0)

为了确保类型安全,静态类型的语言对此类操作施加了一些限制,对于C ++,不允许这样做(除非将所有元素重新打包到新的std::list<Y>中)您在Google上搜索“ c ++容器差异”之类的关键字时,会发现一些有趣的文章,例如

  

所有C ++标准库容器都是不变的

Java支持协方差(除了不变性外)

像Scala这样具有高级类型系统的语言实际上允许您进行更多操作(前提是您按照其类型系统设计在此处和此处注释参数类型)