Nullable instantiator anyone?
Phil Lavoie via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sun Aug 17 18:27:56 PDT 2014
On Sunday, 17 August 2014 at 19:05:11 UTC, Nordlöw wrote:
> On Sunday, 17 August 2014 at 18:51:38 UTC, bearophile wrote:
>> It could be sufficient, but note that in Phobos there are two
>> different versions of Nullable, one of them doesn't require
>> extra memory, it uses one value as the "null" value.
>
> Ok, thanks for the reminder.
>
> Do you have a suggestion of an instantiator for this variant?
> I'm not sure how to define this. So far I have
>
>
> Nullable!T nullable(T nullValue, T)(T a, T nullValue)
> {
> return Nullable!nullValue(a);
> }
>
> unittest
> {
> auto x = nullable!(int.max)(3);
> }
>
>
> but it fails as
>
>
> mangling.d(50,21): Error: undefined identifier T
>
>
> How do I make the template parameter nullValue infer type T
> with a single template parameter? Is it even possible?
Hi Nordlöw,
I'm not sure I fully understand your question but I'll try and
answer it. First of all, yes, you can have everything inferred as
long as your produce a default value for your null value, a.k.a:
Nullable!(T, nullValue) nullable(T, T nullValue = T.init)(T val)
{
return Nullable!(T, nullValue)(val);
}
unittest{
auto myNullableInt = nullable(5);
assert(!myNullableInt.isNull() && myNullableInt == 5);
}
However, keep in mind that using a sentinel value as the null
value can produce surprises:
unittest{
auto myNullableInt = nullable(0);
assert(myNullableInt.isNull()); //Since T.init == 0
}
Phil
More information about the Digitalmars-d-learn
mailing list