
Am Saturday 22 August 2009 14:00:36 schrieb John B. Turpish:
ROSE can do similar things too.
The thing is, this seems to me to be more the job of a build tool and less the job of a library. You don't want meta information you're not using to end up in the executable, right?
right. the metainformation generated would be compile-time constants only. for the example below, something like: namespace reflection{ struct myclass{ struct myvar{ typedef int type; }; ... if there is a "bloat" issue it is probably compilation time. to be able to map a type to its reflection type (also shown below, with a ::type missing), you'd end up with very large MPL sequences, but you could limit reflection to a desired namespace or some types avoid that.
test.cpp: //include result of GCC plugin of test.cpp: #include "test.rpp"
class myclass{ int myvar; double myfunction(); };
int main(){ typedef reflection::myclass::myvar::type ret; BOOST_STATIC_ASSERT(is_same<ret,int>::value); typedef reflecton::myclass::myfunction::type::return_type ret; BOOST_STATIC_ASSERT(is_same<ret,double>::value); }
//or, lookup in MPL map: template<class T> char const *lookup_name(){ return reflection::type<T>::name; }
or anything else you can do with MPL sequences, like iterating over class members.