On Saturday, 25 April 2015 at 19:14:41 UTC, weaselcat wrote:
On Saturday, 25 April 2015 at 19:09:15 UTC, Namespace wrote:
On Saturday, 25 April 2015 at 18:57:13 UTC, Adam D. Ruppe wrote:
On Saturday, 25 April 2015 at 18:50:59 UTC, Namespace wrote:
Nice name, fits better. But that should be in phobos, don't you think?

meh, it might be nice to have, but not being in phobos isn't a big deal to me for little utilities like this
I'm sure newcomers (especially those coming from C++) would be delighted if they had the possibility to reuse their memory. In addition, it could be impossible for them to write such "hack" itself. I already hear the cries: "D wasted memory" and: "I can not reuse my memory". And then it would be less attractive for such people, to switch to D.

I would suggest something like:
----
T emplace(T, U...)(ref T obj, auto ref U args) if (is(T == class)) {
   if (!obj)
       return null;

import std.conv : emplace; // temporary, as long it is not in std.conv

   enum ClassSizeOf = __traits(classInstanceSize, T);

   void[] buf = (cast(void*) obj)[0 .. ClassSizeOf];
   return emplace!(T)(buf, args);
}

T emplaceOrNew(T, U...)(ref T obj, auto ref U args) if (is(T == class)) {
   if (!obj)
       return new T(args);
   return emplace(obj, args);
}
----

hmm...
http://dlang.org/phobos/std_conv.html#.emplace

woops, accidentally posted before finishing

I was going to say that this should probably just be an overload of emplace if it isn't already, seems odd if it isn't.

Reply via email to