Разбираем «стоимость» динамического полиморфизма в C++: чем виртуальный вызов через
Base&/
Base* отличается от обычного, почему вместе с
virtual почти неизбежно приходят владение и время жизни (например,
std::unique_ptr), как базовый контракт связывает код и удорожает сопровождение, и когда полиморфизм действительно оправдан. В конце сравниваем альтернативы:
enum class +
switch, передача поведения лямбдой через
std::function, и закрытые наборы типов через
std::variant.