peerplays-fc/include/fc/reflect_ptr.hpp

49 lines
1 KiB
C++
Raw Normal View History

2012-09-08 02:50:37 +00:00
#ifndef _FC_REFLECT_PTR_HPP_
#define _FC_REFLECT_PTR_HPP_
#include <fc/reflect.hpp>
namespace fc {
struct ptr {
ptr():_obj(0),_reflector(0){}
template<typename T>
ptr( T* v )
:_obj(v),_reflector(&reflect(*v)){}
ptr( const ptr& v )
:_obj(v._obj),_reflector(v._reflector){}
ref operator*()const { return ref( _obj, *_reflector); }
private:
friend struct cptr;
void* _obj;
abstract_reflector* _reflector;
};
// provides pointer semantics
struct cptr {
cptr():_obj(0),_reflector(0){}
template<typename T>
cptr( const T* v )
:_obj(v),_reflector(&reflect(*v)){}
cptr( const cptr& v )
:_obj(v._obj),_reflector(v._reflector){}
cptr( const ptr& v )
:_obj(v._obj),_reflector(v._reflector){}
cref operator*()const { return cref( _obj, *_reflector); }
private:
const void* _obj;
abstract_reflector* _reflector;
};
}
#endif // _FC_REFLECT_PTR_HPP