Tuple indexing and slicing

Jonathan M Davis jmdavisProg at gmx.com
Wed Jul 10 18:16:33 PDT 2013


On Wednesday, July 10, 2013 18:10:42 Timothee Cour wrote:
> On Wed, Jul 10, 2013 at 5:49 PM, Artur Skawina <art.08.09 at gmail.com> wrote:
> > On 07/11/13 00:52, Timothee Cour wrote:
> > > Why not support Tuple indexing and slicing with [] syntax?
> > > 
> > > (see below for a way to index/slice a tuple)
> > 
> > Not sure I understand the question.
> > I guess you'd like this to work for some library pseudo-tuple type
> > - I've not looked at those, somebody else may give you a better answer.
> > 
> > "Native" tuples already support what you're asking for:
> > template Tuple(A...) { alias Tuple = A; }
> > 
> > void main(){
> > 
> > alias T=Tuple!(int,double);
> > pragma(msg,T[0].stringof);
> > pragma(msg,T[0..2].stringof);
> > pragma(msg,typeof(T.init[0]).stringof);
> > pragma(msg,typeof(Tuple!(T.init[0..$])).stringof);
> > 
> > }
> > 
> > artur
> 
> I know native tuples do, I am aksing about std.typecons.Tuple.
> Is there any way to support this in library code ?
> If not, how about changing compiler to allow this?
> 
> I'd like that:
> static assert(is(Tuple!(int,double)[0]==int));
> static assert(is(Tuple!(int,double)[0..$]==Tuple!(int,double)));

Do you want to slice the _type_ or the object? Adding slicing of the value 
should be trivial enough if Tuple doesn't support it already. But slicing the 
type would require that the compiler understand Tuple or that some means of 
overloading opSlice on the types themselves (rather the objects of those 
types) be provided. And I wouldn't expect either of those to happen.

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list