Alias type with different initialiser.

Daniel Kozak via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Feb 13 08:50:58 PST 2017


Dne 13.2.2017 v 17:40 Daniel Kozak napsal(a):

> Dne 13.2.2017 v 16:28 Bastiaan Veelo via Digitalmars-d-learn napsal(a):
>
>> Hi,
>>
>> In Extended Pascal, you can derive from a basic type and change the 
>> default initialiser like so:
>>
>>   type int1 = integer value 1;
>>   var i : int1;
>>       ii : int1 value 2;
>>   assert(i = 1);
>>   assert(ii = 2);
>>
>> I have it working in D, but it seems a little clumsy. Is there a 
>> better way?
>>
>>
>>   struct initial(T, T val)
>>   {
>>       private T _payload = val;
>>       alias _payload this;
>>
>>       static initial opCall(T v)
>>       {
>>           initial s;
>>           s._payload = v;
>>           return s;
>>       }
>>   }
>>
>>   unittest
>>   {
>>       alias initial!(int, 1) int1;
>>       int1 i;
>>       assert(i == 1);
>>       int1 ii = 2;
>>       assert(ii == 2);
>>   }
>>
> https://dlang.org/phobos/std_typecons.html#.Typedef
or you can use Proxy

https://dlang.org/phobos/std_typecons.html#.Proxy

struct initial(T, T val)
{
       private T _payload = val;
       mixin Proxy!_payload;
       this(T v)
       {
     _payload = v;
       }
}

unittest
{
       alias initial!(int, 1) int1;
       int1 i;
       assert(i == 1);
       int1 ii = 2;
       assert(ii == 2);
}


More information about the Digitalmars-d-learn mailing list