Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct B
- {
- virtual ~B() = default;
- virtual void f() = 0;
- };
- using ptr = std::unique_ptr<B>;
- using stack = std::list<ptr>;
- stack s;
- template <typename T>
- void Push()
- {
- static_assert(std::is_base_of_v<B, T>, "Error");
- s.emplace_back(new T);
- }
- template <typename T>
- void Replace()
- {
- static_assert(std::is_base_of_v<B, T>, "Error");
- s.back().reset(new T);
- }
- void f()
- {
- (*s.back()).f();
- }
- #define NOMBRE std::cout << __PRETTY_FUNCTION__ << 'n'
- struct D1 : public B
- {
- D1() { NOMBRE; }
- ~D1() { NOMBRE; }
- void f() override {}
- };
- struct D2 : public B
- {
- D2() { NOMBRE; }
- ~D2() { NOMBRE; }
- void f() override { Replace<D1>(); }
- };
- int main()
- {
- Push<D1>();
- Replace<D2>();
- f();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement