homer512 icon

Optionally owning pointer

homer512 | PRO | 10/28/15 08:11:58 PM UTC | 0 ⭐ | 589 👁️ | Never ⏰ | []
C++ |

560 B

|

None

|

0 👍

/

0 👎

#include <memory>
// using std::unique_ptr, std::pointer_traits
 
 
template<class Pointer>
class FooBase
{
  Pointer _m;
public:
  using pointer = Pointer;
  using element_type = typename std::pointer_traits<pointer>::element_type;
  using reference =  element_type&;
  using const_reference = const element_type&;
  
  explicit FooBase(reference ref)
    : _m(&ref)
  {}
  reference get()
  { return *_m; }
  const_reference get() const
  { return *_m; }
};
 
class Bar;
 
using Foo = FooBase<Bar*>;
using OwningFoo = FooBase<std::unique_ptr<Bar> >;

Comments