Advertisement
GeneralGDA

ScopeGuardEx - try #1

Oct 21st, 2014
468
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.02 KB | None | 0 0
  1. class Widget
  2. {
  3. private:
  4.     template<typename T>
  5.     class Giver final
  6.     {
  7.     public:
  8.         explicit Giver(T& host) : host_(host) {}
  9.  
  10.         Giver(Giver&& other)
  11.         {
  12.             other.ready = false;
  13.         }
  14.  
  15.         Giver& operator=(Giver&& other)
  16.         {
  17.             other.ready = false;
  18.             return *this;
  19.         }
  20.  
  21.         void zig()
  22.         {
  23.             host_.zig();
  24.         }
  25.  
  26.         void zag()
  27.         {
  28.             host_.zag();
  29.         }
  30.  
  31.         ~Giver()
  32.         {
  33.             if (ready)
  34.             {
  35.                 host_.end();
  36.                 ready = false;
  37.             }
  38.         }
  39.  
  40.     private:
  41.  
  42.         bool ready = true;
  43.         T& host_;
  44.  
  45.     };
  46.  
  47.     void end()
  48.     {
  49.         std::cout << "end" << std::endl;
  50.     }
  51.  
  52.     void zig()
  53.     {
  54.         std::cout << "zig" << std::endl;
  55.     }
  56.  
  57.     void zag()
  58.     {
  59.         std::cout << "zag" << std::endl;
  60.     }
  61.  
  62. public:
  63.     Giver<Widget> begin()
  64.     {
  65.         std::cout << "begin" << std::endl;
  66.  
  67.         return Giver<Widget>(*this);
  68.     }
  69. };
  70.  
  71. int _tmain(int argc, _TCHAR* argv[])
  72. {
  73.     {
  74.     Widget widget;
  75.  
  76.     auto giver = widget.begin();
  77.  
  78.     //Widget::Giver<Widget> giverr(widget);
  79.  
  80.     giver.zig();
  81.     giver.zag();
  82.  
  83.     std::cout << "hell, yeah!" << std::endl;
  84.     }
  85.  
  86.     return 0;
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement