我有一个类,它接受一个通用参数
class A(T) {}
我希望能够访问该值。
我该怎么办呢。
虽然我可以在A中编写一个返回T的函数,这是一个好主意,还是有另一种方法来访问类A之外的类型参数T?
答案 0 :(得分:4)
TemplateArgsOf应该做你想做的事。
答案 1 :(得分:2)
您可以在A中定义T的别名,该别名将返回T的实际“值”(类型)。例如:
class A(T)
{
alias type = T;
}
auto a = new A!int();
assert(is(a.type == int));
我在运行时创建了一个新的A!int
只是为了说明。 type
是A!T
的一种静态成员,您可以在编译时访问它。
assert(is(A!double.type == double));
您还可以使用模板轻松提取A
实例化的类型:
alias InstantiationType(_: u!T, alias u, T) = T;
assert(is(InstantiationType!(A!int) == int));
幸运的是,如上所述,此功能以TemplateArgsOf的形式预先包装在Phobos的std.traits中。