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








 
 
 
 "Simen kjaeraas" <simen.kjaras gmail.com>