Я пытаюсь сохранить различные подклассы в векторе unique_ptr <BaseClass>
. Этот подход, похоже, работает, когда подклассы являются одним слоем, но не удается, когда подклассы имеют два слоя.Сохранение различных подклассов в векторе
Вот что я пытаюсь сделать
#include <iostream>
#include <memory>
#include <vector>
using namespace std;
class A
{
int foo;
public:
explicit A(int bar)
{
foo = bar;
}
int getFoo()
{
return foo;
}
virtual void func1() = 0;
};
class B : public A
{
public:
using A::A;
};
class C : public A
{
public:
virtual void func2() = 0;
using A::A;
};
class D : public B
{
public:
using B::B;
void func1()
{
cout << "D1" << endl;
}
};
class E : public C
{
public:
using C::C;
void func1()
{
cout << "E1" << endl;
}
void func2()
{
cout << "E2" << endl;
}
};
int main()
{
vector<unique_ptr<A> > vec;
vec.emplace_back(new D(1));
vec.emplace_back(new E(2));
vec[0]->func1(); // Okay
vec[1]->func1(); // Okay
vec[1]->func2(); // error: 'class A' has no member named 'func2'
E foo(3);
foo.func2(); // Okay
return 0;
}