stl — инициализация связанного списка контейнера абстрактного класса в Stack Overflow

Я хотел бы сделать что-то похожее на это:

#include <list>
#include <iostream>
#include <functional>

class Abstract {
public:
virtual void foo() = 0;
};

class Concrete : public Abstract {
void foo() {
std::cout << "foo's implementation" << std::endl;
}
};

typedef std::list<Abstract> abstract_list;

class Someclass {
public:
Someclass(abstract_list list) : m_list(list) {}
private:
abstract_list m_list;
};

int main(int argc, char **argv) {
Someclass l({ Concrete(), Concrete() });
return 0;
}

Теперь я знаю, что не могу. Аннотация, будучи неполной, не может использоваться как есть в контейнере. Я не хочу использовать указатели (raw ppointer или unique_ptr).

Я пытаюсь переписать мой тип как:

typedef std::list<std::reference_wrapper<Abstract> > abstract_list;

Но это не с

error: use of deleted function ‘std::reference_wrapper<_Tp>::reference_wrapper(_Tp&&) [with _Tp = Abstract]’

Потому что std :: reference_wrapper не работает с rvalue.

Есть ли какая-либо другая опция для статического размещения списка, содержащего абстрактные объекты, с использованием элегантного списка фигурных скобок?

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]