On Monday, October 21, 2013 05:53:46 Agustin wrote: > On Monday, 21 October 2013 at 03:50:24 UTC, Agustin wrote: > > On Monday, 21 October 2013 at 03:46:33 UTC, Jonathan M Davis > > > > wrote: > >> On Monday, October 21, 2013 05:07:02 Agustin wrote: > >>> What about constructor?. My current code is: > >>> T allocate(T : Object, A...)(auto ref A arguments) { > >>> > >>> auto pMemory = rawAllocate(__traits(classInstanceSize, T), > >>> > >>> T.alignof); // Return void* > >>> > >>> emplace!T(cast(T *)pMemory, arguments); > >>> return cast(T) pMemory; > >>> > >>> } > >>> > >>> Doesn't seems to work, and i can't find any good documentation > >>> about it. > >> > >> IIRC, the constructor should be name __ctor. > >> > >> - Jonathan M Davis > > > > no property 'opCall' for type 'Main.MyClass' :( > > Trait allMember return "__ctor", but seems like i cannot call it > directly: > > (cast(T)pMemory).__ctor(arguments); // Being pMemory void*
If you want to see how to use emplace, I'd advise looking at std.typecons.RefCounted's implementation: https://github.com/D-Programming-Language/phobos/blob/master/std/typecons.d#L3505 emplace calls the constructor for you, so I don't know why you'd be trying to call it. But you can look at emplace's implementation if you want to see how to call __ctor. For structs: https://github.com/D-Programming-Language/phobos/blob/master/std/conv.d#L3976 For classes: https://github.com/D-Programming-Language/phobos/blob/master/std/conv.d#L4716 I don't think that it'll work if the constructor is private though, so maybe that's your problem. - Jonathan M Davis