Sturcts with constructor (dmd1.x)

dsimcha dsimcha at yahoo.com
Mon Jan 11 15:09:38 PST 2010


== Quote from Nrgyzer (nrgyzer at googlemail.com)'s article
> Hello everyone,
> I currently try to create a structure with a construtor, but I always get the
following messages:
> Error: Foo.this constructors are only for class definitions
> Error: constructor lisim.lsResult.lsResult.this special member functions not
allowed for structs
> By compiling the follwing code:
> struct Foo {
>     int len;
>     bool len_done;
>     const char* str;
>     int length()
>     {   if (!len_done)
>         {   len = strlen(str);
> 	    len_done = true;
>         }
> 	return len;
>     }
>     this(char* str) { this.str = str; }
> }
> const Foo f = Foo("hello");
> bar(f.length);
> I found that source on
http://www.digitalmars.com/d/2.0/const-faq.html#logical-const. I know that this
source is for d2 and not for d1 but does d1 support similar operations (or is
there no support for struct-constructors)?
> Thanks in advance :)

Struct constructors are D2 only.  That said, you can fake them in D1 by
overloading static opCall:

struct Foo {
    uint field;

    static Foo opCall(SomeType someArgument) {
        Foo foo;

        // Do stuff.
        foo.field = someValue;
        return foo;
    }
}

auto foo = Foo(someArgument);



More information about the Digitalmars-d mailing list