December 10, 2010 Comparing template alias parameters | ||||
---|---|---|---|---|
| ||||
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
|
December 13, 2010 Re: Comparing template alias parameters | ||||
---|---|---|---|---|
| ||||
Posted in reply to Simen kjaeraas | 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 |
Copyright © 1999-2021 by the D Language Foundation