On Wednesday, 20 August 2014 at 21:26:55 UTC, Philippe Sigaud via
Digitalmars-d wrote:
If you want reference semantics but do not want to have
pointers in
your code, yes classes are your best choice.
Certainly the easiest, but I don't think it's always the best. If
light-weightedness is desired, make the struct contain the
reference, effectively making the struct a reference type:
---
private struct Data
{
int a;
string b;
double c;
}
/// Lorem ipsum ...
struct UserFacingType
{
private Data* data;
// use data.foo
}
---
Of course, this means UserFacingType.init is essentially `null`,
just like class references. By using std.typecons.RefCounted, the
user-facing type can also easily be made a reference-counted
reference.
Structs can do everything classes can with enough boilerplate.
Leverage templated types like RefCounted to remove the
boilerplate. Classes are just an in-built convenience feature to
handle the boilerplate of virtual functions.