Opt-in non-null class references?
aliak
something at something.com
Sat Mar 3 18:28:42 UTC 2018
On Friday, 2 March 2018 at 19:47:23 UTC, SimonN wrote:
> I can envision using this Optional type whenever I want
> nullable class reference, and use normal D class references as
> non-nullable references together with a codebase-wide rule that
> assigning null to normal D references is always a bug.
Ay, maybe you can even have a type that enforces non nullable
references?
(not tested):
struct NonNull(T) if (isPointer!T || is(T == class))
{
T value;
alias value this;
this(Args...)(Args args) { this.value = new T(args); } //
always force creation
}
> Hah, I've toyed with some examples, and this stuck out as
> verbose because everything else was really smooth. Optional!int
> dispatches wonderfully without extra syntax, whereas class C
> {}; Optional!C needs the extra dispatch before calling methods.
Yeah, it's unfortunate. If D had custom operators then it
could've been a?.f or whatever :(
So I had to either have a custom function that starts a dispatch
chain or implement opDispatch directly inside Optional. The
problem with the latter is that means if type T has any of the
functions that are part of Optional's interface, they are
basically un-callable unless unwrapped first. I found this
unacceptable.
I'm going to experiment with moving Optional's methods out as
free functions when I get the chance. Then the dynamics between
UFCS/dispatch become a bit weird. And I'm not sure how to work
range functionality in as free functions, but let's see.
If you know of other ways though I'm all ears :)
Cheers
More information about the Digitalmars-d
mailing list