1 #ifndef SHARED_POINTER_H
2 #define SHARED_POINTER_H
4 #include "CORE_Object.h"
8 using CORE_UniquePointer =
typename std::unique_ptr<T,CORE_Object::Delete> ;
14 using CORE_SharedPointer =
typename std::shared_ptr<T> ;
19 using CORE_WeakPointer =
typename std::weak_ptr<T> ;
23 namespace shared_pointer {
27 template<
class T,
class F>
28 static CORE_SharedPointer<T> dynamic_sp_cast(CORE_SharedPointer<F>
const & r) {
29 return dynamic_pointer_cast<T>(r);
33 template<
class T,
class F>
34 static CORE_SharedPointer<const T> dynamic_spc_cast(CORE_SharedPointer<const F>
const & r) {
35 return dynamic_pointer_cast<const T>(r);
41 template<
class T,
class F>
42 static CORE_UniquePointer<T> dynamic_up_cast(CORE_UniquePointer<F> & r) {
43 T* p =
dynamic_cast<T*
>( r.get() );
44 if (p!=
null) r.release();
45 return CORE_UniquePointer<T>(p);
50 template<
class T,
class F>
51 static CORE_UniquePointer<T> dynamic_up_cast(CORE_UniquePointer<F> && r) {
52 T* p =
dynamic_cast<T*
>( r.get() );
53 if (p!=
null) r.release();
54 return CORE_UniquePointer<T>(p);
59 template<
class T,
class F>
60 static CORE_UniquePointer<const T> dynamic_upc_cast(CORE_UniquePointer<const F> & r) {
61 const T* p =
dynamic_cast<const T*
>( r.get() );
62 if( p!=
null) r.release();
63 return CORE_UniquePointer<const T>(p);
68 template<
class T,
class F>
69 static CORE_UniquePointer<const T> dynamic_upc_cast(CORE_UniquePointer<const F> && r) {
70 const T* p =
dynamic_cast<const T*
>( r.get() );
71 if( p!=
null ) r.release();
72 return CORE_UniquePointer<const T>(p);
80 #define CORE_UniqueInstance CORE_UniquePointer
81 #define CORE_SharedInstance CORE_SharedPointer