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;
}