Тема: unique_ptr і базові класи
Маю такі класи:
class World final
{
public:
...
void AddShape(std::unique_ptr<Shape> shape);
};
class CubeSimulation : ...
{
...
World::Box *_box;
};
У класі симуляції потрібно створити Box і передати його в Worod::AddShape.
Перша невдала спроба оскільки шаблони не коваріантни:
auto box_up = make_unique<World::Box>(halfExtents, identity);
_box = box_up.get();
_world->AddShape(box_up);
Можна так, але виглядає кострубато:
auto box_up = make_unique<World::Box>(halfExtents, identity);
_box = box_up.get();
_world->AddShape(unique_ptr<World::Shape>(box_up.release()));
Можна так, але ж не хочеться мати new у програмі [1]
_box = new World::Box(halfExtents, identity);
_world->AddShape(unique_ptr<World::Shape>(_box));
Примітка:
static_pointer_cast - працює лише із shared_ptr. Може потрібно десь собі створити такий для unique_ptr і тримати серед допоміжного краму у проекті?