On Sunday, 9 August 2020 at 15:56:31 UTC, Ali Çehreli wrote:
module deneme;
import std.stdio;
interface I {
void methodName();
}
...
I getClassById(uint id)
{
if (id == 0) {
return cast(A)Object.factory("deneme.A");
} else if(id == 1) {
return cast(B)Object.factory("deneme.B");
} else {
return cast(C)Object.factory("deneme.C");
}
}
void main() {
auto o = getClassById(1);
o.methodName();
}
Why not simply do?
I getClassById(uint id)
{
if (id == 0) {
return new A();
} else if(id == 1) {
return new B();
} else {
return new C();
}
}
Then you can also pass parameters to the constructors or call
further factories to create them, as long as they return a
`I`-compatible type.