将子项复制构造到父类型指针中
copy-construct child into parent type pointer
我有一个有多个孩子的父类
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*,因为它对所有子项都是相同的。
var::root* source = new var::v_int(5);
var::root* copy = /*copy of source*/;
是的,我知道,原始的指点,我怎么敢!!无论如何,我不是来讨论指针类型选择的。
我知道我可以用一个类和一个联合做类似的事情,但是这个类会被大量使用,我不希望未来的"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};
}
// [...]
};
除此之外,在您的示例中,您不显示任何继承(构造函数调用除外(。
相关文章:
- 是否可以从int转换为enum类类型
- 构造函数正在调用一个使用当前类类型的函数
- 将模板化的类型与C++中的某些类/类型进行比较
- 从类继承时,继承的类是否会通过父类重新定义继承的变量
- 从父类方法返回子类对象
- c++, 在子类中,如何在没有对象的情况下访问父类的方法?
- 将父类对象强制转换为子类的问题
- 我有两个类需要在同一 cpp 文件中相互引用,但第一个类无法识别第二个类类型的对象
- 具有纯虚函数和指针数组对象类型的父类的指针数组
- 当函数返回类型为父类时,如何返回子类的对象?
- C 不能将带有父类指针作为类型的静态模板成员定义引用
- 比较从父类继承但存储在父类的向量中的类的对象类型
- 当父类共享指针为返回类型时返回新的基类
- 我能判断投射到父类中的对象类型最初是否是C++中的子类吗
- 在C++中将派生类类型的向量链接到父类类型的向量
- 在类中声明与父类具有相同类型的模板类
- c++中的多态性,父类的载体中的类型丢失
- 如何调用父类类型列表的子类的方法?C++
- 如何使用父类类型的智能指针调用子类的析构函数
- 将父类类型的成员驻留在另一个类中