Мне нужно добавить элементы производных классов в список общих указателей на абстрактный класс.
Я пробовал это.Я знаю, что я пытаюсь создать экземпляр абстрактного класса в приведенном ниже примере, но я не знаю, как заставить его работать.
Упрощенные классы выглядят так:
using namespace std;
class Abstract
{
public:
virtual string toString() const = 0;
};
class A : public Abstract
{
public:
A(int a, int b) : a(a), b(b)
{}
string toString() const { return "A"; }
private:
int a;
int b;
};
class B : public Abstract
{
public:
B(int b) : b(b)
{}
string toString() const { return "B"; }
private:
int b;
};
проблема в следующем классе:
class Data
{
public:
Data(const string & name) : name (name)
{}
Data AddData ( const Abstract & a )
{
//Need to fix next line
l1.push_back(make_shared<Abstract>(a));
return (*this);
}
private:
list<shared_ptr<Abstract>> l1;
string name;
};
Я хочу избежать RTII и dynamic_cast.Я открыт для разных решений.Мне просто нужно как-то хранить элементы разных типов в одном контейнере.
Мне нужно использовать класс Data, например:
Data test("Random Name");
test.AddData(A(1,2))
.AddData(B(3))
.AddData(B(4));