Boost logo

Boost :

Subject: [boost] [intro] Preview: Introspection library
From: Stefan Strasser (strasser_at_[hidden])
Date: 2010-06-28 08:00:55


Hi,

I'd be interested in comments on an introspection library I've been
developing.

there has been no "Is there any interest..."-e-mail yet, as it was
started out of necessity in "namespace detail" of another library, so
you're also welcome to express interest/disinterest in a library like
this, without any specific comments.

source code:
https://svn.boost.org/trac/boost/browser/sandbox/intro/boost/intro/

the library defines a concept that exposes the members of a class, for
introspection algorithms to work with.

e.g. the "print" algorithm applied to a simple object implementing the
concept yields the following results:

intro::print(a,std::cout);

----
{
   A_base = {
     int member_of_base = 789;
   };
   int a = 123;
   float b = 456.7;
   vector<int,class std::allocator<int> > vec = {2, 4, 6, 8, 10};
}
---
other algorithms that are currently implemented:
  - apply_members[_binary]: apply a user-supplied functor to each member
  - apply_recursive: follow pointers, references, STL container elements, etc.
  - serialize:
    serialization of an object tree of 1M objects:
      80 ms. Boost.Serialization: 330 ms.
    serialization of an object graph of 1M objects:
      410 ms. Boost.Serialization: 2700 ms.
  - move: move-construct an object
  - reset_shared
planned or not yet in the sandbox are deserialize, print_recursive,  
copy_deep, copy_shallow, equal_deep, equal_shallow.
an implementation of the concept looks like this:
template<class Mapping>
friend void introspect(Mapping mapping,type<A>){
   mapping
     (base_class<A_base>()                  )
     (member<A,int             ,&A::m_a>()  )
     (member<A,float           ,&A::m_b>()  )
     (member<A,std::vector<int>,&A::m_vec>())
   ();
}
members can also be associated with tags or data, and can be assigned  
semantics (e.g. polymorphic, shared/unique for pointers), but I won't  
go into too much detail for now.
Best,
Stefan

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk