考虑我有以下课程:
/// 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)。我想在运行时获取类型(如字符串)。