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.