spir wrote:
On 03/21/2011 12:55 AM, bearophile wrote:
Among the things I've listed about Archetype there's one interesting thing. Class instances aren't PODs, but sometimes I prefer reference semantics and to populate fields in a plain way, expecially for simple classes.

Time ago I and other people have suggested a syntax like (this also to avoid a class of bugs http://d.puremagic.com/issues/show_bug.cgi?id=3878 ):


class Foo {
   string x;
   int y = 1;
   this(this.x, this.y) {}
}
void main() {
   Foo f3 = new Foo("hello", 10);
}


A simpler solution are classes with automatic constructors:

class Foo {
   string x;
   int y = 1;
}
void main() {
   Foo f1 = new Foo(); // Good
   Foo f2 = new Foo("hello"); // Good
   Foo f3 = new Foo("hello", 10); // Good
}


What kind of problems are caused by this? :-)


Currently that syntax is supported for structs created as values, but not for structs created by pointer:

struct Foo {
   string x;
   int y = 1;
}
void main() {
   Foo* f1 = new Foo(); // OK
   Foo* f2 = new Foo("hello"); // Error: no constructor for Foo
   Foo* f3 = new Foo("hello", 10); // Error: no constructor for Foo
}

I definitely want some feature like that in D.

Have no idea why a default seems complicated for classes while structs have it.

It's not that it's complicated, it's that for structs, the ordering of their members is part of the public interface. For classes, the members are not public.

Reply via email to