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.
Sure. You just access the field by using the key. Here is a quick-and-dirty example here(I haven't compiled it yet, but it should communicate the idea): https://gist.github.com/pfultz2/cfc447c7ccfa8ac2e76f So then you should be able to write: table<person> persons; for(const person& p:persons.where(at_keyfields::age(persons) == 60)) { ... } Another idea is to generate the member in with the key, perhaps something like this: #define QUINCE_GEN_KEY(name, ...) \ struct name : __VA_ARGS__ \ { \ template<class T> \ struct lazy \ { \ T name; \ }; \ }; Then you can use the fusion keys to compose a class that inherits from each lazy member, so you could still support accessing it using the `->` operator. I don't show an example here. However, the first approach I think is sufficient.
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.
You wouldn't generate your mapper class using the preprocessor, you can just generate it using C++ template metaprogramming. Perhaps, you would use the preprocessor to generate the keys, but not the mapper or table class(as I show in my little example). Boost.Fusion does a great job of handling product types, which an ORM would need. It seems unnecessary to reinvent the wheel here. -Paul Fultz II -- View this message in context: http://boost.2283326.n4.nabble.com/quince-queries-in-C-expressions-tp4665143... Sent from the Boost - Dev mailing list archive at Nabble.com.