Advertisement
homer512

Optionally owning pointer

Oct 28th, 2015
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.56 KB | None | 0 0
  1. #include <memory>
  2. // using std::unique_ptr, std::pointer_traits
  3.  
  4.  
  5. template<class Pointer>
  6. class FooBase
  7. {
  8.   Pointer _m;
  9. public:
  10.   using pointer = Pointer;
  11.   using element_type = typename std::pointer_traits<pointer>::element_type;
  12.   using reference =  element_type&;
  13.   using const_reference = const element_type&;
  14.  
  15.   explicit FooBase(reference ref)
  16.     : _m(&ref)
  17.   {}
  18.   reference get()
  19.   { return *_m; }
  20.   const_reference get() const
  21.   { return *_m; }
  22. };
  23.  
  24. class Bar;
  25.  
  26. using Foo = FooBase<Bar*>;
  27. using OwningFoo = FooBase<std::unique_ptr<Bar> >;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement