Value type, ref type, how about something in between?
The Anh Tran
trtheanh at gmail.com
Sat Jul 4 18:22:26 PDT 2009
According to D spec,
structs, unions are value types.
classes are ref types.
But this world is not perfectly described by the above 2. There are 4
cases:
1. Value storage class inside value type.
class C {};
struct S {};
struct Outer
{
C cc; // ref storage for ref type. This is the rescue for
splitting copy problem. D language's creators wanted this behavior. If
S ss; // value storage for value type. OK.
void funcC(C c) {} // ref param. Correction for splitting copy.
void funcS(S s) {} // value param. OK.
}
2. Value storage class inside ref type.
class Outer
{
C cc; // ref storage. Correction for splitting copy.
S ss; // value storage. OK.
void funcC(C c) {} // ref param. Correction for splitting copy.
void funcS(S s) {} // value param. OK.
}
3. Ref storage class inside a ref type.
class Outer
{
C cc; // ref storage for ref type. OK.
S ss; // How? Wanted ref, but value storage here
void funcC(C c) {} // ref param. OK.
void funcS(ref S s) {} // ref param for value type. OK.
}
4. Ref storage class inside value type.
struct Outer
{
C c; // ref storage for ref type. OK.
S s; // How? Wanted ref, but value storage here
void funcC(C c) {} // ref param. OK.
void funcS(ref S s) {} // ref param for value type. OK.
}
I can solve case 3+4 by wrapping struct S inside a class template.
But can we have a nicer / straightforward syntax?
Is there any problem that prevent ref storage class declaration for
struct types, sir?
More information about the Digitalmars-d
mailing list