Примечание: не дубликат C++ 11 Delegated Constructor Pure Virtual Method & Function Calls -- Dangers?. Этот другой вопрос относится к концептуально подобной проблеме, которая на самом деле не представляет собой решение для этого случая.C++ 11 наследование конструктора и чистые виртуальные методы
Рассмотрим следующую программу:
#include <iostream>
using std::cout;
using std::endl;
class Base {
virtual void init() = 0; // a hook function
public:
Base(int a, int b) { /* ... */ init(); }
Base(char a, int b) { /* ... */ init(); }
Base(char a, int b, double* c) { /* ... */ init(); }
/* etc. Dozens of constructors */
};
class Derived1 : public Base {
void init() { cout << "In Derived1::init()" << endl; }
public:
using Base::Base;
};
class Derived2 : public Base {
void init() { cout << "In Derived2::init()" << endl; }
public:
using Base::Base;
};
int main() {
Derived1 d1(1, 2);
Derived2 d2('a', 3);
return 0;
}
Этот код явно не запускается (хотя он компилируется с предупреждениями на некоторых компиляторах). Вопрос в том, каков наилучший способ реализации такого рода шаблонов? Предполагая, что в базе существуют десятки производных классов и десятки конструкторов, переопределение базовых конструкторов в производном классе (с вызовами базовых конструкторов и init() в теле производного конструктора) на самом деле не является идеальным.
Я бы рекомендовал удалить многие новые строки и пустые комментарии, так что их проще конкретизировать полный код в сопоставимом маленьком окне браузера. – dornhege