Во время работы с шаблонами я столкнулся с необходимостью создания конструкторов базового класса, доступных из унаследованных классов для создания объектов, для уменьшения операций копирования/вставки.
Я думал сделать это с помощью ключевого слова using
таким же образом с помощью случая с функциями, но это не работает.
class A
{
public:
A(int val) {}
};
class B : public A
{
};
class C : public A
{
public:
C(const string &val) {}
};
class D : public A
{
public:
D(const string &val) {}
using A::A; // g++ error: A::A names constructor
};
void main()
{
B b(10); // Ok. (A::A constructor is not overlapped)
C c(10); // error: no matching function to call to 'C::C(int)'
}
Итак, мой вопрос: есть ли способ импортировать конструкторы базового класса после объявления новых в унаследованном классе?
Или существует только одна альтернатива для объявления новых конструкторов и вызова базовых из списка инициализаторов?