reinterpret_cast vector of derived class to vector of base class

六月ゝ 毕业季﹏ 提交于 2019-12-02 01:46:50

To answer the question from your code :

No, it's actually a very bad practice , and it will lead to undefined behavior.

If sizeof(A) is equal to sizeof(B) your code might end up working ,considering that all functions derived in B and used inside f3 are virtual and non inline.

If you end up using such code , make sure you will never ever add another virtual function / member variable to the B class .

If you want a way to bypass this limitation (f3 third party function only accepts vector of A ) , try making B a composite rather then a derived (if you are not accessing protected members of A ) :

class A 
{
   public:
   int n;
   void f1();
}
class B
{
  public:
      B (const A& a); // dependency injection
      void f2();
      A  myA; // bad practice, should be private with getter /setter
}

This way you are isolating the A specific functionality / features.

Ofc you will still need to manually make a vector of A objects made from the objects contained in B (you cannot pass a vector of B).

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