On Thursday, 23 February 2017 at 09:52:26 UTC, Arun Chandrasekaran wrote:
I'm trying to write an RAII wrapper on Linux.

I understand struct in D doesn't have default constructor (for .init reasons).
I don't want to use `scope`.

Is there an elegant way to achieve this in D?


static opCall() is the way to emulate an argumentless struct constructor. You still need to call it explicitly, though:

```
import std.stdio : writefln;
struct Foo {
        int a;
        static Foo opCall() {
                Foo foo;
                foo.a = 42;
                return foo;
        }
        ~this() {
                writefln("destroyed with a=%d", a);
        }
        @disable this(this);
        @disable void opAssign(Foo);
}

void main()
{
        auto foo1 = Foo(); // ok
        Foo foo2;          // == Foo.init
}
```


  • RAII Arun Chandrasekaran via Digitalmars-d-learn
    • Re: RAII ketmar via Digitalmars-d-learn
      • Re: RAII kinke via Digitalmars-d-learn
        • Re: RAII Adam D. Ruppe via Digitalmars-d-learn
      • Re: RAII Arun Chandrasekaran via Digitalmars-d-learn
        • Re: RAII ketmar via Digitalmars-d-learn
    • Re: RAII Adrian Matoga via Digitalmars-d-learn
    • Re: RAII cym13 via Digitalmars-d-learn
      • Re: RAII Arun Chandrasekaran via Digitalmars-d-learn

Reply via email to