我有一个类,它包含一个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
....
....
}
}发布于 2018-08-01 08:51:21
在基类中创建虚拟方法Parameter* makeCopy(),并为每个子类实现它,并使用m_parameters.push_back(p->makeCopy())
https://stackoverflow.com/questions/51628947
复制相似问题