Is there a simple way to check if value is null for every case?
SG
s at g.com
Mon Aug 27 00:51:05 UTC 2018
On Sunday, 26 August 2018 at 16:39:53 UTC, rikki cattermole wrote:
> UFCS function called isNull.
>
> e.g.
>
> import std.traits : isPointer;
> bool isNull(T)(T value) if (is(T == class) || isPointer!T) {
> return value is null;
> }
Hi Rikki,
I'm still confused, I want to create a extension for checking
null for every type, so in D I'll need to handle each case with
Templates?
Because in C# I just need to compare an object/variable with null,
x == null;
myObject == null;
myObject.i == null;
myStruct == null;
myStruct.j == null;
This works fine in C#.
But again, in D I'll need the check the type? Is possible to make
one Template for all cases?
The code below works, but I don't think this is a right thing to
do, right?
import std.stdio, std.typecons, std.variant, std.conv;
import std.traits : isPointer;
bool foo(T)(T value) if (is(T == VariantN!32LU)) {
return value == null;
}
bool foo(T)(T value) if (is(T == Nullable!int) || isPointer!T) {
return value.isNull;
}
bool foo(T)(T t) if (!is(T == Nullable!int) && !is(T ==
VariantN!32LU)){
if (is(T == typeof(null))){
return true;
}
return (t is null);
}
class S{
Nullable!int i;
}
void main(){
Variant v = null;
writeln(v == null," - " ,v.foo);
Variant v2 = "a";
writeln(v2 == null," - " ,v2.foo);
string x = "a";
writeln(x is null," - " ,x.foo);
string y = null;
writeln(y is null," - ", y.foo);
auto z = null;
writeln(z is null," - ", z.foo);
S s = new S();
writeln(s.i.isNull," - ", s.i.foo);
}
More information about the Digitalmars-d-learn
mailing list