tuple can write [],but can't read []

John Colvin via Digitalmars-d digitalmars-d at puremagic.com
Tue Apr 29 02:53:28 PDT 2014


On Tuesday, 29 April 2014 at 09:23:03 UTC, FrankLike wrote:
> Hi,erveryone,
>
> type Tuple!(int,int,int,string)  can write[],but can't read[];
>
> module main;
> import std.stdio,std.typecons,std.conv;
>
> void main(string[] argv)
> {
>             alias Tuple!(int,int,string) tuple2;
> 	alias Tuple!(int,int,string)[10] tupleS2;
>
> 	void bbx(tupleS2 x)
> 	{
> 		foreach(v;x)
> 		{
> 	
>
> 		writeln(v);
> 			foreach(k;v)
> 			 writeln(k);
> 		}
> 	}
> 	tupleS2 xy2;
>
> 	foreach(i,v;xy2)
> 	
>
> {
> 		xy2[i] = tuple2(1,-1,"xy2 :"~i.to!string);
> 	}
> 	xy2[1][0]=100;  // can write
> 	bbx(xy2);
>
>
> 	
> 	for(int i=0;i<3;i++)
> 	{
> 	
>
> 	writeln(xy2[0][i]); //  can't read
> 	}
> 	
>    }
> -------------------code end----------------------
>
> if use the  'for(int i=0;i<3;i++)' ,then error.
>
> Error: no [] operator overload for type Tuple!(int, int, int,
> int, int, int, int, int, int, int, int, string)	 	
>
> Thank you.
>
> Frank

Tuple indexes must be compile-time values. This will work:


import std.stdio, std.typecons, std.conv, std.typetuple;

void main()
{
	alias Tuple!(int, int, string) tuple2;
	alias Tuple!(int, int, string)[10] tupleS2;

	void bbx(tupleS2 x)
	{
		foreach(v; x)
		{
			writeln(v);
			foreach(k;v)
				writeln(k);
		}
	}
	tupleS2 xy2;

	foreach(i, v; xy2)
	{
		xy2[i] = tuple2(1, -1, "xy2 :" ~ i.to!string);
	}
	xy2[1][0]=100;
	bbx(xy2);
	
	foreach(i; TypeTuple!(0,1,2))
	{
		writeln(xy2[0][i]);
	}
}


More information about the Digitalmars-d mailing list