cast list<A*> to list<B*> where B inherits A

廉价感情. 提交于 2019-11-29 14:47:47

Your intuition (and juanchopanza's comment) is correct - the lists are completely unrelated types.

The options are:

  1. use list<A*> everywhere in the first place, even when you know the dynamic type is B* or C*
  2. write a wrapper over list<A*> which casts to/from the correct dynamic type - this is equivalent to the (un)boxing behaviour in Java generics
  3. re-write doSomething as a function template whose only constraint is that the types be convertible

    template <typename Sequence1, typename Sequence2>
    void doSomething(Sequence1 &x, Sequence2 &y) {
      // require only that *x.begin() is convertible with *y.begin(), etc.
    }
    

    I'd also agree with Kerrek's suggestion that this should use iterators instead, but that doesn't change the type requirement significantly - you just get two iterator type params instead of two container type params

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!