
I have a project in which I use these things I call "records" to attach
data to edges and vertexes in a boost::graph. They are visitable
(acyclic visitor described by Alexandrescu) and I have metafunctions
that will take their most derived type and give me a list of "fields"
that they contain. I can then write generic processors to do things
like build editors for them or perform operations that can effect any
field of a particular type or concept. Thus I often find myself using
mpl::for_each and writing things like this:
struct operator
{
template < typename MetaField >
void operator()(MetaField const&, boost::enable_if< some_test >::type
* = 0);
template < typename MetaField >
void operator()(MetaField const&, boost::disable_if