次のクラスがあると考えてください。
/// File classes.d
class C {
string type() { return "C"; };
}
class C1 : C {
override string type() { return "C1"; };
}
class C2 : C {
override string type() { return "C1"; };
}
次に、次のような別の場所にファクトリを実装したいと思います。
/// File factory.d
module factory;
import std.functional;
import std.stdio;
void main() {
mixin(import("classes.d"));
auto c = cast(typeof(mixin("C1"))) Object.factory("C1");
writeln(c.type());
}
コンパイラ(dmd 2.058)は私にこう言っています:
factory.d(7): Error argument C1 to typeof is not an expression
私は次の行がうまくコンパイルされることを知っています:
auto c = cast(C1) Object.factory("classes.C1");
ただし、これにはコンパイル時にタイプ(C1)を知っている必要があります。実行時に型を取得したい(文字列など)。