
Larry Evans wrote:
But isn't an enumerator in some enumeration the equivalent of an "element tag"?
Yes,
The enumerator can also be thought of as a name.
yes,
Which can be done with enumerators also.
and also yes.
But again, I don't see why adding a tag is any better than using an enumerator. The only difference between an array (all elements of the same type) and a tuple, is that the type of the value as well as the value depends on the index. And if the types are indexed by the same enumeration, then you've solve the problem. In addition, a similar scheme can be used for variants (or disjoint sum). See
http://cvs.sourceforge.net/viewcvs.py/boost-sandbox/boost-sandbox/libs/index...
As your code demonstrates, enumerators can be used without duplicating information, but an enum and map enum->type is required for each tuple. This is verbose and should be wrapped in a macro. Then again, I don't like macros a lot :) In the end, getting 'by type' has the same expressive power of using enumerators, i simply think that it would have a better syntax and it would work out of the box with all tuples without the need of a map.
BTW, tuples containing many objects of the same type are better seen as containers, thus the indexed get is fine.
Agreed, but the indexed get works just as well when the argument is an enumerator instead of a literal unsigned, and when it's an enumerator, the meaning is clearer:
t.get<0>(); t.get<1>();
is obviously not as clear as:
t.get<first_field>(); t.get<second_field>();
[snip]
Well, i actually believe the first to be clearer. It is a matter of taste though. -- Giovanni P. Deretta