Rzućmy klasę tak:Jak uniknąć konstruktorów kodów?
struct Base {
Base() { ... }
Base(int) { ... }
Base(int,string) { ... }
...
};
chciałbym odziedziczyć wiele klas od Base
, więc piszę
struct Son : public Base {
Son() : Base() { }
Son(int) : Base(int) { }
Son(int,string) : Base(int,string) { }
};
struct Daughter : public Base {
Daughter() : Base() { }
Daughter(int) : Base(int) { }
Daughter(int,string) : Base(int,string) { }
};
i nie trzeba dodawać żadnego kodu do konstruktorów dziecka. Czy można odziedziczyć je pośrednio? Aby wywołać je tak samo, jak w przypadku Base
, wystarczy zmienić nazwę? Preprocessor może być tutaj nadużywany, ale czy istnieje inny sposób obejścia tego problemu?
C++ 11 ma delegujące konstruktory. – 111111
Dzika sugestia: czy mógłbyś rozważyć dodanie kilku (starannie wybranych) domyślnych argumentów? 'Daughter (int i = 0, string s =" Hello "): Baza (i, s)' byłaby pojedynczym konstruktorem. –
@ 111111: Świetnie! Czy możesz podać mi link lub przykład? –