zip with fieldTuple
bearophile via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Fri Jun 6 15:27:37 PDT 2014
John:
> I can iterate over the struct elements with the traits
> FieldTypeTuple!foo,
In such iteration you are using a static foreach. Types are
compile-time constructs in D. If you need run-time entities you
need to get their typeinfo.
> I can iterate over the the string that represents the elements
> I want to shove in the struct,
This is a "dynamic" (regular) foreach.
> but when I try to loop over *both* of these at the same time
> with zip(...) I get an error.
zip only works on run time values. So you can't zip a built-in
typetuple of types with a range of values.
> I'm not sure if it's actually a range? I assumed it would be a
> range of some kind,
It's not a range. FieldTypeTuple returns a built-in typetuple
that in this case is really a built-in of types, that are purely
compile-time entities.
> and each of the elements would have a supertype of something
> like 'type' since that's what they are.
They are types (and they aren't other things like uninstantiated
templates that in D are another kind), but not even in our dreams
there is a supertype for them :-)
> It could infer that now you have two ranges, one of 'type' and
> one of 'string'.
Nope.
> If I'm able to foreach over two things, shouldn't I be able to
> foreach over the paired ranges with zip? It seems so simple...
If you turn the built-in typetuple of types into an array or lazy
range of typeinfo, then you can zip them. But I don't think this
is a good idea. It's better to forget the zipping and use a
static foreach on the types, using also an index, and use such
index to access the second array of run time values.
Bye,
bearophile
More information about the Digitalmars-d-learn
mailing list