Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- template <class T>
- class refl_property: public refl_var_base
- {
- public:
- refl_property(std::function<void(T)> s, std::function<T()> g)
- :m_setter(s), m_getter(g)
- {
- }
- inline void set( const T & v) { m_setter(v); }
- inline T get() const { return m_getter(); }
- protected:
- std::function<T()> m_getter;
- std::function<void(T)> m_setter;
- };
- class refl_db
- {
- public:
- template<class T>
- bool add(const char *name, refl_property<T> *dp )
- {
- m_properties.insert(std::make_pair(name, dp));
- return true;
- }
- template<class T>
- bool get(const char *name, refl_property<T> **dp)
- {
- auto it = m_properties.find(name);
- if( it != m_properties.end())
- {
- *dp = dynamic_cast<refl_property<T> *> (it->second);
- }
- return *dp != NULL;
- }
- std::map<std::string, refl_var_base*> m_properties;
- };
- #define REFLECTION_BEGIN( _class ) \
- typedef _class className; \
- refl_db m_refldata; \
- void __reflinit(){
- #define REFLECTION_END };
- #define REFL_PROPERTY(name, type, setter, getter) \
- m_refldata.add(name, new refl_property<type>(std::bind(&className::setter, this, std::placeholders::_1), \
- std::bind(&className::getter, this)) );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement