On Wednesday, 26 September 2018 at 21:25:07 UTC, Steven Schveighoffer wrote:
...
Object.factory is a really old poorly supported type of reflection. I would not depend on it for anything.


Roger that.  Will avoid :)

You are better off using your own registration system.

As far as choosing the design for your problem, you can use:

auto obj = typeid(obj).create();

which is going to work better, and doesn't require a linear search through all modules/classes like Object.factory.


How does this work?

The language reference states that typeid(Type) returns "an instance of class TypeInfo corresponding to Type".
(https://dlang.org/spec/expression.html#typeid_expressions)

But then the TypeInfo class doesn't seem to have a .create() method, or at least not one in the documentation:
https://dlang.org/phobos/object.html#.TypeInfo

It looks like what I want, so it might be very helpful.

If it were me, I'd probably instead implement a clone virtual method. This way if any custom things need to occur when copying the data, it can be handled.

-Steve

I'm thinking I want to avoid the virtual method in this case, for reasons I wrote about in my response to Adam (https://forum.dlang.org/post/zovficijurwhuurrr...@forum.dlang.org). But I think it's probably a good suggestion in most cases; I suspect that most of the time wanting to write a "deepCopy" method is going to be in response to some problem that will respond well to just virtualizing the method.

Thanks for the advice!

Reply via email to