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