Advertisement
Guest User

Untitled

a guest
Sep 20th, 2013
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.91 KB | None | 0 0
  1. template<typename storedtype>
  2.     class knownpointer
  3.     {
  4.         typedef std::unique_ptr<storedtype,void(*)(storedtype*)> safeptr;
  5.         safeptr ptr;
  6.         void (*UpdatePtr)(storedtype * const);
  7.  
  8.     public:
  9.  
  10.  
  11.         template<typename realType>
  12.         realType* const Get()
  13.         {
  14.             return static_cast<realType*>(ptr->get());
  15.         }
  16.  
  17.         void Update()
  18.         {
  19.             UpdatePtr(ptr.get());
  20.         }
  21.  
  22.         template<typename realType>
  23.         knownpointer() : ptr(safeptr(new realType,[](storedtype* object){delete static_cast<realType*>(object);}))
  24.             ,UpdatePtr([](storedtype* const ptr) {static_cast<realType* const>(ptr)->Update();};)
  25.         {
  26.             static_assert(std::is_void<storedtype>::value || std::is_base_of<storedtype,realType>::value,"That type is not derived from base");
  27.         }
  28.  
  29.         knownpointer(nullptr_t n) : ptr(safeptr(nullptr,[](storedtype* obj){}))
  30.         {
  31.         }
  32.  
  33.     private:
  34.         knownpointer(const knownpointer&);
  35.         knownpointer& operator=(const knownpointer&);
  36.     };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement