gpt4 book ai didi

c++ - 在C++中仅使用基类指针复制派生类

转载 作者:行者123 更新时间:2023-12-01 14:39:50 25 4
gpt4 key购买 nike

我正在尝试仅使用基类指针制作派生类的副本。

所以,如果我有:

class BaseClass; //Abstract class with =0 functions
class LeftClass : BaseClass;
class RightClass : BaseClass;

我有一个将BaseClass作为参数的函数:
void Function(BaseClass* baseClass)

我想复制BaseClass,但是我也想复制LeftClass或RightClass的扩展功能,但是我不知道传递给函数的是哪一种-两者都是可能的。

所以我有这样的事情:
//global
vector<BaseClass*> myVector;

void Function(BaseClass* baseClass)
{
BaseClass* baseClassCopy = new BaseClass(baseClass);
myVector.push_back(baseClassCopy);
}

然后我用左或右类调用该函数
int main()
{
LeftClass leftClass;
Function(&leftClass);
LeftClass* ResultOfCopy = myVector.at(0);
}

该代码不会将整个左类复制为副本,有没有办法让我忽略呢?

另外 BaseClass是抽象的,有些功能是 =0,所以我不能再使用了。否则,其他类中将使用复制功能。

最佳答案

如果您不能更改任何类来添加克隆函数,则可以使用dynamic_cast手动确定其运行时类型并调用正确的派生构造函数,以手动完成此操作。看起来像

void Function(BaseClass* baseClass)
{
if (auto ptr = dynamic_cast<LeftClass*>(baseClass))
myVector.push_back(new LeftClass(*ptr));
if (auto ptr = dynamic_cast<RightClass*>(baseClass))
myVector.push_back(new RightClass(*ptr));
}

您可以在 live example中看到它的运行

关于c++ - 在C++中仅使用基类指针复制派生类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60438605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com