Для полиморфизма обычный подход заключается в использовании std::vector<base*>
. Однако я должен сам предоставлять адреса, то есть управлять самой памятью, использую ли я std::unique_ptr<>
или необработанные указатели.
Я хотел бы иметь тип polymorphic_storage<base>
, который принимает любой тип, который наследуется от base
. Я также хочу, чтобы типы сохранялись в непрерывной памяти для более быстрого обхода и проблем, связанных с кешем.
Однако существует довольно большая проблема: при отсутствии информации о типе на уровне хранилища правильные операции перемещения/копирования должны вызываться при изменении размера.
Запрос функции:
- Любой тип, который наследуется от базового класса, может быть добавлен в хранилище; нет фиксированных иерархий наследования.
- Наследуемые типы должны быть правильно выровнены внутри типа хранилища.
- Правильные операции перемещения и копирования должны быть вызваны, поскольку я не имею дело с типами POD.
Какой механизм я могу использовать для достижения этого?
Пока я даю ответ, я приветствовал бы всех, кто разместил их решение.