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

Reply via email to