Sturcts with constructor (dmd1.x)

Nrgyzer nrgyzer at googlemail.com
Tue Jan 12 09:16:37 PST 2010


dsimcha Wrote:

> == 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);

Thanks - that solution works great :)




More information about the Digitalmars-d mailing list