On 3/5/22 12:48, bauss wrote:
This is where compile-time has its limits compared to runtime type creation, because templates only live during compile-time then it isn't really that easy to do something like this, where it would be trivial in other languages like C#.

That's something I don't really get. I totally understand that you can't instantiate the template during runtime, but why can't already instantiated classes be registered just like non-templated ones?

I tried the following snippet, and couldn't find C!int.C anywhere, although it **must** be there: I can get the `TypeInfo_Class` object, so I can clearly create new instances at runtime:

```d
import std.stdio : writeln;

class C(T) {}
class D {}

void main() {
    auto c = new C!int();
    auto c2 = typeid(c).create();
    auto d = new D();
    writeln(typeid(c).name);
    writeln(typeid(c2).name);
    writeln(typeid(d).name);
    writeln("----");
    writeln;
    writeln;
    foreach (m; ModuleInfo) {
        if (m) {
            writeln(m.name);
            writeln("--------------------");
            foreach (c; m.localClasses) {
                if (c) {
                        writeln(c.name);
                }
            }
            writeln;
        }
    }
}
```

Reply via email to