复制派生类的构造函数,而无需测试所有类型?

时间:2018-08-01 08:44:16

标签: c++

我有一个类,其中包含一个std :: vector,其中许多元素具有相同的基类但类型不同。现在,我想为其实现副本构造函数。

实际上有许多不同种类的对象,是否有比获得所有类型并拥有巨大的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 个答案:

答案 0 :(得分:2)

在基类中创建虚拟方法Parameter* makeCopy()并为每个子类实现它并使用m_parameters.push_back(p->makeCopy())