gpt4 book ai didi

c++ - 将子对象复制构造为父类型指针

转载 作者:行者123 更新时间:2023-11-30 04:48:20 25 4
gpt4 key购买 nike

我有一个有多个 child 的父类

namespace var
{
enum type {t_int, t_float, t_string, t_null};

class root
{
public:
type t = t_null;
root(type t) : t(t) {}
}

class v_int : public root
{
public:
int value;
v_int() : root(t_int) {}
v_int(int value) : value(value), root(t_int) {}
}
class v_float : public root
{
public:
float value;
v_float() : root(t_float) {}
v_float(float value) : value(value), root(t_float) {}
}
class v_string : public root
{
public:
std::string value;
v_string() : root(t_string) {}
v_string(std::string value) : value(value), root(t_string) {}
}
}

还有一个函数需要在 root* 中创建一个子项的拷贝,但该子项已经作为 root* 出现,我希望避免切换以查找类型,请调用特定的构造函数,并将其分配给 root*,因为它对所有 child 都是相同的。

var::root* source = new var::v_int(5);
var::root* copy = /*copy of source*/;

是的,我知道,原始指针,我怎么敢!!!无论如何,我不是来讨论指针类型选择的。


我知道我可以用一个类和一个 union 做类似的事情,但是这个类会被大量使用,我不希望 future 的“v_uint8_t”占用和“v_int64_t”一样多的空间

最佳答案

我不确定我是否理解您的问题,您是在寻求一种无需切换潜在子类即可复制元素的方法吗?

如果是这种情况,只需将纯虚成员函数添加到您的 root 类:

class root{
// [...]
public:
virtual root* clone() const = 0;
// [...]
};

并在子类中实现它:

class v_int : public root{
// [...]
public:
root* clone() const override{
return new v_int{this->value};
}
// [...]
};

除此之外,在您的示例中,您没有显示任何继承(构造函数调用除外)。

关于c++ - 将子对象复制构造为父类型指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55884252/

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