Guest User

Untitled

a guest
Mar 19th, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.12 KB | None | 0 0
  1. #include <memory>
  2.  
  3. template <typename T>
  4. class ValueGetter {
  5. public:
  6. explicit ValueGetter(const T& value) : m_value{value} {
  7. }
  8.  
  9. const T& get() const {
  10. return m_value;
  11. }
  12. private:
  13. const T& m_value;
  14. };
  15.  
  16. template <typename T>
  17. class ValueSetter {
  18. public:
  19. explicit ValueSetter(T& value) : m_value{value} {
  20. }
  21.  
  22. void set(T value) {
  23. m_value = value;
  24. }
  25.  
  26. private:
  27. T& m_value;
  28. };
  29.  
  30. template <typename T>
  31. static std::unique_ptr<ValueGetter<T>> MakeGetter(const T& value) {
  32. return std::make_unique<ValueGetter<T>>(value);
  33. }
  34.  
  35. template <typename T>
  36. static std::unique_ptr<ValueSetter<T>> MakeSetter(T& value) {
  37. return std::make_unique<ValueSetter<T>>(value);
  38. }
  39.  
  40. class BooleanFlipper {
  41. public:
  42. explicit BooleanFlipper(bool& val) : m_getter{MakeGetter<bool>(val)}, m_setter{MakeSetter<bool>(val)} {
  43. }
  44.  
  45. bool flip() {
  46. if (m_getter->get()) {
  47. m_setter->set(false);
  48. } else {
  49. m_setter->set(true);
  50. }
  51.  
  52. return m_getter->get();
  53. }
  54.  
  55. private:
  56. std::unique_ptr<ValueGetter<bool>> m_getter;
  57. std::unique_ptr<ValueSetter<bool>> m_setter;
  58. };
Add Comment
Please, Sign In to add comment