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!