从D中的类访问泛型参数

从D中的类访问泛型参数,d,D,我有一个类,它接受一个泛型参数 class A(T) {} 我希望能够获得它的价值 我怎样才能做到这一点 我想我可能能够在a中编写一个返回T的函数,这是一个好主意,还是有其他方法可以访问类a之外的类型参数T?在std.traits中应该做你想做的事。在std.traits中应该做你想做的事。你可以在a中为T定义一个别名,它将返回实际的“值”T的(类型)。例如: class A(T) { alias type = T; } auto a = new A!int(); assert(is

我有一个类,它接受一个泛型参数

class A(T) {}
我希望能够获得它的价值

我怎样才能做到这一点


我想我可能能够在a中编写一个返回T的函数,这是一个好主意,还是有其他方法可以访问类a之外的类型参数T?

在std.traits中应该做你想做的事。

在std.traits中应该做你想做的事。

你可以在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));

幸运的是,如前所述,该功能在Phobos的std.traits中以的形式预先打包。

您可以在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));

幸运的是,正如前面所提到的,这个功能在Phobos的std.traits中以。

挑剔:它们是模板参数,而不是泛型。模板更强大。挑剔:它们是模板参数,而不是泛型。模板更强大。