Ali Çehreli wrote: > On 09/16/2013 01:24 PM, Marek Janukowicz wrote: > > > static string[string] columns () { > // ... > > } > > Although the function itself is static, it returns a dynamic value. > > > foreach( attr, col; columns() ) { > > __traits(getMember, me, attr) = typeof(__traits(getMember, me, > > attr)).init; > > } > > That foreach is a run-time foreach because columns()'s return value is a > run-time value. > > As far as I know, static foreach is only for tuples (or TypeTuples). If > you can generate the AA as a tuple, then the foreach will be evaluated > at compile time.
I read your articles about tuples and templates and it all now makes more sense (why is your book not linked on dlang.org? It is much better stuff for beginners than official D docs). However, there is still one thing I struggle with: how do I create a tuple at compile time if I'm getting information I want to put into it in a foreach? All the examples I found create a tuple with all it's attributes available, while I get mine in an iterative manner... -- Marek Janukowicz