代码之家  ›  专栏  ›  技术社区  ›  goaran

复制派生类的构造函数,而不测试所有类型?[复制品]

c++
  •  1
  • goaran  · 技术社区  · 7 年前

    我有一个类,它包含一个STD::向量,它有许多相同基类但不同类型的元素。现在我想为它实现一个复制构造函数。

    有很多不同类型的对象,所以有没有比获取所有类型更好的方法,并且有一个巨大的if分支来复制所有类型?

    MyObject::MyObject(const MyObject &rhs)
    {
        // copy all the parameters
        for(size_t i=0; i<rhs.m_parameters.size(); i++)
        {
            Parameter* p = rhs.m_parameters[i];
            if(dynamic_cast<ParameterType1*>(p) != NULL)
            {
                ParameterType1* p_old = dynamic_cast<ParameterType1*>(p);
                ParameterType1* p_new = new ParameterType1(*p_old);
                m_parameters.push_back(p_new);
            }
            else if(dynamic_cast<ParameterType2*>(p) != NULL)
            {
                ParameterType2* p_old = dynamic_cast<ParameterType2*>(p);
                ParameterType2* p_new = new ParameterType2(*p_old, this);
                m_parameters.push_back(p_new);
            }
            else if(dynamic_cast<ParameterType3*>(p) != NULL)
            {
                ParameterType3* p_old = dynamic_cast<ParameterType3*>(p);
                ParameterType3* p_new = new ParameterType3(*p_old, this);
                m_parameters.push_back(p_new);
            }    
            else if
            ....
            ....
        }
    }
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   nikniknik2016    7 年前

    Parameter* makeCopy() m_parameters.push_back(p->makeCopy())