Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- template<typename storedtype>
- class knownpointer
- {
- typedef std::unique_ptr<storedtype,void(*)(storedtype*)> safeptr;
- safeptr ptr;
- void (*UpdatePtr)(storedtype * const);
- public:
- template<typename realType>
- realType* const Get()
- {
- return static_cast<realType*>(ptr->get());
- }
- void Update()
- {
- UpdatePtr(ptr.get());
- }
- template<typename realType>
- knownpointer() : ptr(safeptr(new realType,[](storedtype* object){delete static_cast<realType*>(object);}))
- ,UpdatePtr([](storedtype* const ptr) {static_cast<realType* const>(ptr)->Update();};)
- {
- static_assert(std::is_void<storedtype>::value || std::is_base_of<storedtype,realType>::value,"That type is not derived from base");
- }
- knownpointer(nullptr_t n) : ptr(safeptr(nullptr,[](storedtype* obj){}))
- {
- }
- private:
- knownpointer(const knownpointer&);
- knownpointer& operator=(const knownpointer&);
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement