digitalmars.D.learn - Comparing template alias parameters
- Simen kjaeraas (31/31) Dec 10 2010 Given an index structure like this:
- Simen kjaeraas (4/33) Dec 13 2010 Nobody? Meh.
Given an index structure like this: struct Index( alias arr ) if ( is( typeof( arr ) t : U[], U ) ) { private size_t idx; property pure nothrow size_t get( ) const { return idx; } alias get this; invariant( ) { assert( idx < arr.length ); } this( size_t value ) { idx = value; } Index opAssign( size_t value ) { idx = value; return this; } } would it be possible to do something akin to this: void foo( T )( T[] arr, Index!arr a ) { } void bar( ) { int[] a = [1,2,3]; Index!a idx; foo( a, idx ); // ensures idx is a valid index for a } Somewhat trivial an application, as this could easily be tested with an in clause, but imagine that ( arr is Index!(arr).arr ) has to be true. -- Simen
Dec 10 2010
Simen kjaeraas <simen.kjaras gmail.com> wrote:Given an index structure like this: struct Index( alias arr ) if ( is( typeof( arr ) t : U[], U ) ) { private size_t idx; property pure nothrow size_t get( ) const { return idx; } alias get this; invariant( ) { assert( idx < arr.length ); } this( size_t value ) { idx = value; } Index opAssign( size_t value ) { idx = value; return this; } } would it be possible to do something akin to this: void foo( T )( T[] arr, Index!arr a ) { } void bar( ) { int[] a = [1,2,3]; Index!a idx; foo( a, idx ); // ensures idx is a valid index for a } Somewhat trivial an application, as this could easily be tested with an in clause, but imagine that ( arr is Index!(arr).arr ) has to be true.Nobody? Meh. -- Simen
Dec 13 2010