Simen Kjaeraas wrote: > On Thu, 11 Aug 2011 15:32:20 +0200, Timon Gehr <timon.g...@gmx.ch> wrote: > >> Graham Fawcett wrote. >>> On Thu, 11 Aug 2011 20:10:15 +0800, zhang wrote: >>> >>>>> > I think D needs user defined attributes first. >>>> >>>> About attribute, here is an example: >>>> >>>> .... >>>> >>>> There is a problem that is D's basic type is not nullable. In C#, >>>> the nullable integer type can be defined as "Int?" or >>>> "Nullable<int>". >>> >>> You don't need attributes for that: you can just define a "struct >>> Nullable(T)" that wraps the value, and provides a way to express a >>> null value. >>> >>> struct Person { >>> int ID; // required >>> Nullable!int age; // optional >>> ... >>> } >>> >>> void foo(Person p) { >>> if (p.age.isNull) ... >>> else writeln(p.age + 100); >>> } >>> >>> Graham >> >> Alternatively you just use a class to wrap the value: >> >> template Nullable(T){ >> static if(is(T == class)) alias T Nullable; >> else class Nullable{T v; alias v this;} >> } >> >> >> The benefit of this approach is that you don't have to invent new ways >> to test for >> null values. > > Or, you know, a simple pointer? Avoids some of the overhead of the class > solution. > > -- > Simen
Well, sure. :) But he was specifically asking for a nullable reference akin to what you get in C#. I don't see how it is useful anyways.