我是D的新手,所以我可能会遇到完全错误,请赐教!
据我所知,documentation D提供了发现功能参数装饰的特征:
void fooref(ref int x) {
static assert(__traits(isRef, x));
static assert(!__traits(isOut, x));
static assert(!__traits(isLazy, x));
}
void fooout(out int x) {
static assert(!__traits(isRef, x));
static assert(__traits(isOut, x));
static assert(!__traits(isLazy, x));
}
void foolazy(lazy int x) {
static assert(!__traits(isRef, x));
static assert(!__traits(isOut, x));
static assert(__traits(isLazy, x));
}
为什么找不到in
装饰品有什么特质?
答案 0 :(得分:3)
__traits
和std.traits
中包含很多好东西,但它们并不一定完整。因此,如果您发现某些您认为应该通过__traits
或std.traits
检查的内容,那么请create an enhancement request。
现在,正如所说的那样,找到in
的方法是没有意义的。 in
与const scope
相同,如果您可以检查in
,那么const scope
也必须与之匹配。真的,你关心const
还是关心scope
?或者你关心两者?检查那些,而不是in
。
然而,遗憾的是,目前,在使用scope
时检查in
实际上并不起作用。 std.traits.ParameterStorageClassTuple
可用于获取参数的存储类(无,scope
,out
,ref
和/或lazy
),但它目前未能为scope
提供in
。所以,目前,你运气不好。尽管如此报道了bug。
但您仍然可以通过执行const
之类的操作来检查is(T == const)
(其中T
是您正在检查的参数的类型)。