这是我的情况。我有X和Y两个班级。
X继承自Y。
class X : public Y
我有一个这样定义的方法:
void getSomethingFromList(std::list<Y> list);
如何像这样将X对象列表传递给此方法?
std::list<X> xList;
getSomethingFromList((std::list<Y>)xList);
答案 0 :(得分:0)
唯一的方法是使用(唯一)指针列表,而不是对象本身。显然,这并不理想,但这是我们为虚拟化付出的代价。就您而言,
loginService.userWatcher.and.returnValue(Observable.of('test'));
答案 1 :(得分:0)
为了确保类型安全,静态类型的语言对此类操作施加了一些限制,对于C ++,不允许这样做(除非将所有元素重新打包到新的std::list<Y>
中)您在Google上搜索“ c ++容器差异”之类的关键字时,会发现一些有趣的文章,例如
所有C ++标准库容器都是不变的
Java支持协方差(除了不变性外)
像Scala这样具有高级类型系统的语言实际上允许您进行更多操作(前提是您按照其类型系统设计在此处和此处注释参数类型)