Comparing template alias parameters
Simen kjaeraas
simen.kjaras at gmail.com
Mon Dec 13 12:40:10 PST 2010
Simen kjaeraas <simen.kjaras at 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
More information about the Digitalmars-d-learn
mailing list