#pragma once class CGameHandler; template class ConstTransitivePtr { T *ptr; ConstTransitivePtr(const T *Ptr) : ptr(const_cast(Ptr)) {} public: ConstTransitivePtr(T *Ptr = NULL) : ptr(Ptr) {} const T& operator*() const { return *ptr; } T& operator*() { return *ptr; } operator const T*() const { return ptr; } T* get() { return ptr; } const T* get() const { return ptr; } operator T*() { return ptr; } T *operator->() { return ptr; } const T *operator->() const { return ptr; } void dellNull() { delete ptr; ptr = NULL; } template void serialize(Handler &h, const int version) { h & ptr; } friend CGameHandler; };