这是一个使用谷歌找到的棘手答案,因为有许多类似的问题,但不同。
基本上这个想法是,我有ProjectA
和ProjectB
他们都继承ProjectBase
。它们以不同的方式解析数据,但除此之外,每个人都有自己的成员,它们都更新了来自ProjectBase
的成员。
因此,当我们projecta->Parse()
时,我们想复制ProjectBase
内容并在projectb->Build()
. 此外,这些类还有更多的虚拟、独特和共享 ptr 成员。
class ProjectBase
{
protected:
int data;
public:
virtual void Parse() = 0;
virtual Zip Build() = 0;
}
class ProjectA : public ProjectBase
{
void Parse()
{
data = 2;
}
Zip Build()
{
}
}
class ProjectB : public ProjectBase
{
void Parse()
{
data = 3;
}
Zip Build()
{
}
}
// I need to copy the content of the ProjectBase (or here it will be int data) from projecta to projectb
std::unique_ptr<ProjectA> projecta = std::make_unique<ProjectA>();
projecta->Parse();
std::unique_ptr<ProjectB> projectb = std::make_unique<ProjectB>();
// ???
// I need to use the data = 2 inside projectb->Build()
这是对象切片实际上是您想要的情况之一。如果向上转换目标对象引用,则隐式ProjectBase
复制赋值运算符将执行所需的操作。
static_cast<ProjectBase &>(*projectb) = *projecta;
这将仅将继承的数据成员从*projecta
分配给*projectb
ProjectBase
。