C'tors from templates

Robert Clipsham robert at octarineparrot.com
Sat Oct 31 12:19:38 PDT 2009


dsimcha wrote:
> Is there a way to run a class's c'tor on a block of memory from a template
> function?  For example:
> 
> C newClass(C, CtorArgs...)(CtorArgs args) {
>     // Allocate, initialize.
>     // Want to call the c'tor that takes type CtorArgs.
> }

----
C newClass(C, CtorArgs...)(CtorArgs args) {
     return new C(args);
}

class Foo{ this(int a, string b) { /* do something */ } }

auto foo = newClass!(Foo)(1, "bar");
----

That seems to work here... or are you meaning you already have a block 
of memory allocated and want to turn it into an instance of the class? 
In which case something like:

----
C newClass(C, CtorArgs...)(CtorArgs args) {
    void* mem;
    // Allocate/initialize etc, store in inst of type C
    // Stolen/adapted from Object.d:
    if( inst.classinfo.flags & 8 && inst.classinfo.defaultConstructor )
    {
        C delegate(CtorArgs) ctor;
        ctor.ptr = cast(void*)inst;
        ctor.funcptr = cast(C function(CtorArgs))
                           inst.classinfo.defaultConstructor;
        return ctor(args);
    }
    return null;
}
----

Should work (untested).



More information about the Digitalmars-d mailing list