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