Map one tuple to another Tuple of different type
    H. S. Teoh via Digitalmars-d-learn 
    digitalmars-d-learn at puremagic.com
       
    Tue Jul 22 09:40:35 PDT 2014
    
    
  
On Tue, Jul 22, 2014 at 03:52:14PM +0000, Vlad Levenfeld via Digitalmars-d-learn wrote:
> I'm just confused about how static while is supposed to work because
> static foreach, to my understanding, would have to work by making a
> new type for each iteration. I say this because, 1) runtime foreach
> works like that (with type => range), and 2) without ctfe foreach, the
> only way I know of to iterate a typelist is to make a new type with
> one less element, so I imagine static foreach lowers to that.
> 
> I suppose its possible to make a struct with static immutable start
> and end iterators, and make new types out of advancing the start
> iterator until it was equal to the end. Seems like a step backward
> though.
> 
> Anyway my actual question is: if all values are constant at compile
> time, how would a static while loop terminate?
Basically, think of it as custom loop unrolling:
	TypeTuple!(
		int, "x",
		float, "y",
		uint, "z"
	) t;
	// This loop:
	foreach (i; staticIota(0, 3)) {
		t[i]++;
	}
	// Is equivalent to:
	t[0]++;
	t[1]++;
	t[2]++;
	// Which is equivalent to:
	t.x++;
	t.y++;
	t.z++;
The loop body is basically expanded for each iteration, with the loop
variable suitably substituted with each element of the typelist.
T
-- 
Microsoft is to operating systems & security ... what McDonalds is to gourmet cooking.
    
    
More information about the Digitalmars-d-learn
mailing list