On 17/07/2014 2:38 PM, pfultz2 wrote:
When I come back from the tuples detour, how will I get this class defined? There is no need to define this class. Boost.Fusion takes care of it already.
Again, you say "takes care of it" -- but your "it" is not the "it" that I need. :) Let's look from the point of view of a quince user. The user writes some code like this: extern table<point> points; for (const point &p: points.where(points->x < 4.0f)) std::cout << p.y << std::endl; Look at the expression "points->x". "points" is the table. Its operator->() returns a pointer to that table's value mapper. points->x is a mapper for one part of points. In order to make this syntax work, the mapper type has to have a member named x, i.e. a member whose name is the same as the name of the value type's member. This is a requirement, so that my EDSL looks the way I want it to look. The QUINCE_MAP_CLASS macro makes this happen by defining a structure with members named in this way. If you can do *that* with Boost.Fusion then perhaps you can show us the code that does it, and we discuss costs and benefits.
If I were to take the tuples detour, that would be the only site where it happens. What do you mean?
I mean, if I were to take the approach of implementing QUINCE_MAP_CLASS and QUINCE_MAP_CLASS_WITH_BASES by (a) using Boost.Fusion to define some kind of tuple, and then (b) using some other means to turn that tuple into the class I need, then I expect it would all be done in one place, _viz._ inside the definition of quince's private macro QUINCE_DEFINE_CLASS_MAPPER_WITH_BASES. So I would be introducing a dependency on Boost.Fusion for the sake of changing one point in my code. --- Michael