Templates For Reflection In Cpp

I know from literature that Templates can be used for reflection in CeePlusPlus. I am looking for some details about implementation strategies. -- JohnFletcher

Reference: Giuseppe Attardi & Antonio Cisternino "Reflection Support by means of template metaprogramming" see http://www.di.unipi.it/~attardi/

I have also found this implementation by Konstantin Knizhnik http://www.garret.ru/~knizhnik/cppreflection/docs/reflect.html

It's probably also worth looking at the boost type traits library at http://www.boost.org/libs/type_traits/index.htm


Re the Knizhnik page, it is actually possible (although not pleasant) to extract this information at run-time from a C++ class, provided the members are wrapped slightly. This avoids having the RunTimeTypeInformation registration stuff being included in a cpp file. This means it will work for templated classes that use their parameters to declare members. I do have this code working, but I'm still writing up the technique in an understandable way. -- KatieLucas

That's interesting.... do tell... give us a hint? -- BillWeston


Another way (used in several libraries) is partial template specialization. This is a poor example but can be generalized. This may not be the best way to do this:

 template <typename T> std::string type(const T&); 
 template <>           std::string type(const int&)    { return std::string("int");    } 
 template <>           std::string type(const double&) { return std::string("double"); } 

void main() { int n = 0; double d = 0.0; std::cout << type(n) << std::endl << type(d) << std::endl; }
Disadvantages: user must create specializations for all reflected types.

Of course, you may be able to get an existing library for standard types. BoostLibraries include a type traits library, the standard library has numeric_limits<>, etc.

Advantages: specialization creates a policy as to which types reflect that will be caught at compile time.


CategoryCpp CategoryCppTemplates CategoryReflection TemplateMetafunctionHasFunction


EditText of this page (last edited September 6, 2006) or FindPage with title or text search