David Abrahams wrote:
on Thu Mar 08 2007, Christoph Duelli
wrote: Given a struct like struct X { int a; char b; float c; } and some function-'template' f
is it possible to 'generate' - preferably by means of templates, MPL or something of the kind - variations of some function f for each of X's fields?
E.g. I'd like to have functions like int getA() { return a; } char getB() { return b; } float getC() { return c; } ...
(The functions I have in mind are more complex, obviously, but the idea is to generate one such function for all the fields of X.) I would like to avoid writing a macro call or something per field, as I would like the code to work (after recompiling it) even if the definition of X is changed and some fields are added. So, is there some generic 'iterator' over the fields of a struct?
Nope.
You might consider using Boost.Fusion and using a tuple instead of a struct. You won't be able to generate a family of overloaded functions at namespace scope, but you will be able to generate a family of overloaded (static) member functions.
You can also map your struct(s) to a fusion tuple. The mapping can be
a simple "tie". Example:
fusion::vector