从D中的类访问泛型参数

时间:2015-07-04 23:05:48

标签: d

我有一个类,它接受一个通用参数

class A(T) {}

我希望能够访问该值。

我该怎么办呢。

虽然我可以在A中编写一个返回T的函数,这是一个好主意,还是有另一种方法来访问类A之外的类型参数T?

2 个答案:

答案 0 :(得分:4)

std.traits中的

TemplateArgsOf应该做你想做的事。

答案 1 :(得分:2)

您可以在A中定义T的别名,该别名将返回T的实际“值”(类型)。例如:

class A(T)
{
    alias type = T;
}

auto a = new A!int();
assert(is(a.type == int));

我在运行时创建了一个新的A!int只是为了说明。 typeA!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中。