#include #include class Layer { public: explicit Layer(std::vector& events) { events.push_back(level()); } virtual ~Layer() = default; virtual int level() const noexcept { return 10; } }; class Ready final : public Layer { public: explicit Ready(std::vector& events) : Layer(events) { events.push_back(level()); } int level() const noexcept override { return 20; } }; int main() { std::vector events; Ready object(events); const Layer& view = object; events.push_back(view.level()); assert((events == std::vector{10, 20, 20})); }