Changeset 15103 for lang/cplusplus/reflection
- Timestamp:
- 07/03/08 16:13:48 (6 months ago)
- Location:
- lang/cplusplus/reflection/trunk
- Files:
-
- 2 modified
-
memrebuild.hpp (modified) (1 diff)
-
reflection.hpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
lang/cplusplus/reflection/trunk/memrebuild.hpp
r14745 r15103 119 119 120 120 #undef MEM_REBUILD_ 121 122 template <typename T, typename TI> T core(const void *p, TI t) 121 122 template <typename T, typename TI> 123 typename builder<T>::func_t get_instantiator(TI t) 123 124 { 124 typedef mem_rebuild_ns::builder_map<T> map; 125 for (typename map::const_iterator i = map::m.begin(); 126 i != map::m.end(); 125 for (typename builder_map<T>::const_iterator i = builder_map<T>::m.begin(); 126 i != builder_map<T>::m.end(); 127 127 ++i) { 128 128 typename mem_rebuild_ns::builder<T>::func_t instantiate; 129 129 if ((instantiate = (*i)->get(t)) != NULL) 130 return (*instantiate)(p);130 return instantiate; 131 131 } 132 132 throw std::bad_cast(); 133 } 134 135 template <typename T, typename TI> T core(const void *p, TI t) 136 { 137 return (*get_instantiator<T, TI>(t))(p); 133 138 } 134 139 -
lang/cplusplus/reflection/trunk/reflection.hpp
r14887 r15103 10 10 namespace reflection { 11 11 12 template <class T, typename Vt> struct member_getter { 13 Vt (*f)(const void*); 14 char T::*p; 15 member_getter(Vt (*_f)(const void*), char T::*_p) : f(_f), p(_p) {} 16 T operator()(const T &obj) { 17 return (*f)(obj.*p); 18 } 19 }; 20 12 21 template <class T> struct member : public mem_rebuild_ns::type_is_t { 13 22 virtual ~member() {} … … 19 28 template <typename Vt> Vt get(const T &obj) const { 20 29 return mem_rebuild<Vt>(&(obj.*ptr()), this); 30 } 31 template <typename Vt> member_getter<T, Vt> getter() const { 32 return member_getter<T, Vt>(mem_rebuild_ns::get_instantiator<Vt>(this), 33 ptr()); 21 34 } 22 35 template <typename Vt> void set(T &obj, const Vt &v) const {
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)