On 9/27/18 1:18 AM, Chad Joan wrote:
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
typeid sometimes gives you a more derived type than TypeInfo. Including
for classes and structs.
In the past, .classinfo gave you a different thing than typeid(obj), but
now it is the same thing:
auto obj = new Object;
// classinfo and typeid are the same object
assert(obj.classinfo is typeid(obj));
// and the same type
static assert(is(typeof(obj.classinfo) == typeof(typeid(obj))));
I wouldn't use classinfo any more, I generally use typeid.
-Steve