Advertisement
Guest User

Untitled

a guest
May 4th, 2016
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.40 KB | None | 0 0
  1. template <class T>
  2. class refl_property: public refl_var_base
  3. {
  4. public:
  5. refl_property(std::function<void(T)> s, std::function<T()> g)
  6. :m_setter(s), m_getter(g)
  7. {
  8. }
  9.  
  10. inline void set( const T & v) { m_setter(v); }
  11. inline T get() const { return m_getter(); }
  12. protected:
  13. std::function<T()> m_getter;
  14. std::function<void(T)> m_setter;
  15. };
  16.  
  17. class refl_db
  18. {
  19. public:
  20. template<class T>
  21. bool add(const char *name, refl_property<T> *dp )
  22. {
  23. m_properties.insert(std::make_pair(name, dp));
  24. return true;
  25. }
  26.  
  27. template<class T>
  28. bool get(const char *name, refl_property<T> **dp)
  29. {
  30. auto it = m_properties.find(name);
  31. if( it != m_properties.end())
  32. {
  33. *dp = dynamic_cast<refl_property<T> *> (it->second);
  34. }
  35. return *dp != NULL;
  36. }
  37.  
  38. std::map<std::string, refl_var_base*> m_properties;
  39. };
  40.  
  41. #define REFLECTION_BEGIN( _class ) \
  42. typedef _class className; \
  43. refl_db m_refldata; \
  44. void __reflinit(){
  45.  
  46.  
  47. #define REFLECTION_END };
  48.  
  49. #define REFL_PROPERTY(name, type, setter, getter) \
  50. m_refldata.add(name, new refl_property<type>(std::bind(&className::setter, this, std::placeholders::_1), \
  51. std::bind(&className::getter, this)) );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement