我有一个相当大且冗长的类,其中隐式生成的复制构造函数将几乎做完全正确的事情,除了一个特定的字段。
有没有办法编写一个调用隐式版本的用户定义的复制构造函数,然后在末尾添加一两行?或者我是否必须编写一个冗长的(而且无聊且容易出错)用户定义的复制构造函数,它主要复制隐式复制构造函数?
class MySimpleObject
{
private:
FieldA m_fieldA;
FieldB m_fieldB;
[... repeated a lot...]
SpecialField m_trickyField;
public:
MySimpleObject(const MySimpleObject& other)
{
ImplicitCopyCtor(*this,other); // This is what I want to simplify, instead of copying all the fields by hand.
m_trickyField.DoCloneSeparately(other.m_trickyField);
}
};
注意:SpecialField 由第三方库提供,因此我无法重构或修改它。我不知道为什么它没有正确复制,但它没有,我想这是有充分理由的。我喜欢将它包装在一个行为正常的类中的想法。我会调查的。
最佳答案
fundamental theorem of software engineering是你的 friend :
struct MakeSpecialSnowflakeLessSpecial
{
MakeSpecialSnowflakeLessSpecial(const MakeSpecialSnowflakeLessSpecial& other)
{
m_trickyField.DoCloneSeparately(other.m_trickyField);
}
SpecialField m_trickyField;
};
class MySimpleObject
{
private:
FieldA m_fieldA;
FieldB m_fieldB;
[... repeated a lot...]
MakeSpecialSnowflakeLessSpecial m_special;
public:
MySimpleObject(const MySimpleObject&) = default;
};
关于c++ - 在用户定义的复制构造函数中使用隐式复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39089263/