У меня есть родительский класс с несколькими дочерними элементами
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 *, поскольку он будет одинаковым для всех дочерних элементов.
var::root* source = new var::v_int(5);
var::root* copy = /*copy of source*/;
Да, я знаю, необработанные указатели,как я смею !!!В любом случае, я не собираюсь обсуждать выбор типа указателя.
Я знаю, что могу сделать что-то подобное с одним классом и объединением, но этот класс будет часто использоваться, и я не хочубудущее "v_uint8_t" займет столько же места, сколько "v_int64_t"