struct A {
B b;
A(int x):b(x){}
A(int x, float g) // how to implement this? I want to init b as a C.
};
struct B {
enum {e_c, e_d} type;
int i;
B(int i_):i(i_){}
};
struct C : public B {
float f;
C(int i_, float f_):B(i),f(f_){}
};
struct D : public B {
double ff;
D(int i_, double d):B(i),ff(d){}
};
Может быть, есть другой способ закодировать это? Первоначально у меня был только класс B, но я решил разделить его, чтобы я не продолжал добавлять (несовместимые / взаимоисключающие) поля в B. Мое решение было, когда A использует b, он проверяет перечисление b, чтобы увидеть, какой это тип. , затем бросает B * к C * или D *, чтобы получить число с плавающей или двойной. Моя проблема в том, что теперь я не знаю, как позволить инициализировать A b. Позволяет ли мне язык делать что-то подобное?
edit : Я только что понял, что буква А не могла бы выделить место для дополнительных полей С или D. Там не было бы свободного места для хранения поплавка или двойной. Итак, я думаю, что правильный способ сделать то, что я хочу, это добавить в B a union {float f; double ff;};
?