Auto constructor [Was: Archetype language]

Don nospam at nospam.com
Mon Mar 21 05:30:41 PDT 2011


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.


More information about the Digitalmars-d mailing list