|
Boost : |
Subject: Re: [boost] Reflection?
From: Jean-Louis Leroy (jl_at_[hidden])
Date: 2008-11-03 18:17:49
Jeremy Pack wrote:
> Jean-Louis,
> Boost.Reflection handles multiple and virtual inheritance fine.
Does the version from
http://boost-extension.blogspot.com/2008/07/latest-release-downloadable.html
contain support for inheritance already?
My primary interest is not in reflection per se, for me it's just a tool
upon which one can build generic object-processing tools like dumping
objects to text descriptions or XML or implementing object-relational
mapping.
Once we have reflection, we need a way to deal with fields in a generic
manner, whatever their type: int, vector<int>, vector< vector<int> >
etc. One solution is to reflect the structure of the field's type as
well: make the field class contain a pointer to a polymorphic type
object, from which one derives int_type, a vector_type - which contains
in turn a pointer to the element's type - etc. Pattern freaks will call
it a composite ;-)
The next step is multimethods. Once we have them we can write code like
this:
// using BS's proposed syntax in D&E
void process_type(virtual type&, virtual processor&, void*);
void process(instance i, processor& p)
for each field (i)
process_type(*field->type, p, field->address(i))
class text_dumper : public processor { ... };
void process_type(virtual int_type& t,
virtual text_processor& p, char* pv) {
p << *reinterpret_cast<int*>(pv);
}
void process_type(virtual vector_type& t,
virtual text_processor& p, char* pv) {
p.indent();
char *iter = t.begin(pv), last = t.end(pv);
while (iter != last) {
process_type(t.element_type, p, iter);
t.forward(iter);
}
p.outdent();
}
What do you think of the idea?
Jean-Louis
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk