On 25/07/2018 8:05 PM, Shachar Shemesh wrote:
Forget the "why" for the moment.
T construct(T, ARGS...)(ARGS args) if( is(T==class) ) {
auto buffer = new ubyte[__traits(classInstanceSize, T)];
T cls = cast(T)buffer.ptr;
Allocates the storage space of the fields (both public and private).
// Is this really the best way to do this?
buffer[] = cast(ubyte[])typeid(T).initializer()[];
Copies the default initialized state, basically does .init for a struct
but was not too long ago renamed because it conflicted.
cls.__ctor(args);
Calls a constructor that matches the given arguments.
return cls;
}
My question is this: Is this the correct way to do it? There are steps
here that seem kinda arbitrary, to say the least.
Yes and not arbitrary, read above :)
I am looking for something akin to C++'s placement new.
Thank you,
Shachar
Standard solution[0].
[0] https://dlang.org/phobos/std_conv.html#.emplace.4