Show
Ignore:
Timestamp:
07/03/08 16:13:48 (5 months ago)
Author:
kazuho
Message:

add getter()

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/cplusplus/reflection/trunk/reflection.hpp

    r14887 r15103  
    1010namespace reflection { 
    1111   
     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   
    1221  template <class T> struct member : public mem_rebuild_ns::type_is_t { 
    1322    virtual ~member() {} 
     
    1928    template <typename Vt> Vt get(const T &obj) const { 
    2029      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()); 
    2134    } 
    2235    template <typename Vt> void set(T &obj, const Vt &v) const {