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

Reply via email to