D 2015/2016 Vision?

Namespace via Digitalmars-d digitalmars-d at puremagic.com
Tue Oct 6 01:07:55 PDT 2015


On Monday, 5 October 2015 at 22:15:59 UTC, bitwise wrote:
> On Monday, 5 October 2015 at 21:29:20 UTC, Namespace wrote:
>> But you can simply relinquish alias this and use opDispatch. 
>> Problem solved.
>
> I don't understand what you mean.

----
import std.stdio;

struct Scoped(T) {
     private void[__traits(classInstanceSize, T)] buf = void;

     this(Args...)(auto ref Args args) {
         this.buf = typeid(T).init[];
         this.get().__ctor(args);
     }

     ~this() {
         .destroy(this.get());
     }


     private T get() {
         return cast(T) this.buf.ptr;
     }

     auto opDispatch(string method, Args...)(auto ref Args args) {
         return mixin("this.get()." ~ method ~ "(args)");
     }
}

auto scoped(T, Args...)(auto ref Args args) {
     return Scoped!T(args);
}

class A
{
     string name;

     this(string name)
     {
        this.name = name;
        writeln("Creating A");
     }

     ~this()
     {
        writeln("Destroying A");
     }

     void hello()
     {
        writeln("Hello, ", this.name);
     }
}

void main() {
     //A a0 = scoped!A("Test"); <-- fails

     auto a1 = scoped!A("Foo");
     a1.hello();

     auto a2 = scoped!A("Bar");
     a2.hello();
}
----


More information about the Digitalmars-d mailing list