Advertisement
Guest User

Untitled

a guest
Jun 20th, 2019
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.76 KB | None | 0 0
  1. struct B
  2. {
  3. virtual ~B() = default;
  4. virtual void f() = 0;
  5. };
  6.  
  7. using ptr = std::unique_ptr<B>;
  8. using stack = std::list<ptr>;
  9.  
  10. stack s;
  11.  
  12. template <typename T>
  13. void Push()
  14. {
  15. static_assert(std::is_base_of_v<B, T>, "Error");
  16. s.emplace_back(new T);
  17. }
  18.  
  19. template <typename T>
  20. void Replace()
  21. {
  22. static_assert(std::is_base_of_v<B, T>, "Error");
  23. s.back().reset(new T);
  24. }
  25.  
  26. void f()
  27. {
  28. (*s.back()).f();
  29. }
  30.  
  31. #define NOMBRE std::cout << __PRETTY_FUNCTION__ << 'n'
  32.  
  33. struct D1 : public B
  34. {
  35. D1() { NOMBRE; }
  36. ~D1() { NOMBRE; }
  37. void f() override {}
  38. };
  39.  
  40. struct D2 : public B
  41. {
  42. D2() { NOMBRE; }
  43. ~D2() { NOMBRE; }
  44. void f() override { Replace<D1>(); }
  45. };
  46.  
  47. int main()
  48. {
  49. Push<D1>();
  50. Replace<D2>();
  51. f();
  52. return 0;
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement