DB ORM
Simen Kjaeraas
simen.kjaras at gmail.com
Thu Aug 11 08:35:02 PDT 2011
On Thu, 11 Aug 2011 15:32:20 +0200, Timon Gehr <timon.gehr at 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
More information about the Digitalmars-d
mailing list