为什么D中没有'isIn`特征?

时间:2012-09-19 10:13:38

标签: d

我是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装饰品有什么特质?

1 个答案:

答案 0 :(得分:3)

__traitsstd.traits中包含很多好东西,但它们并不一定完整。因此,如果您发现某些您认为应该通过__traitsstd.traits检查的内容,那么请create an enhancement request

现在,正如所说的那样,找到in的方法是没有意义的。 inconst scope相同,如果您可以检查in,那么const scope也必须与之匹配。真的,你关心const还是关心scope?或者你关心两者?检查那些,而不是in

然而,遗憾的是,目前,在使用scope时检查in实际上并不起作用。 std.traits.ParameterStorageClassTuple可用于获取参数的存储类(无,scopeoutref和/或lazy),但它目前未能为scope提供in。所以,目前,你运气不好。尽管如此报道了bug

但您仍然可以通过执行const之类的操作来检查is(T == const)(其中T是您正在检查的参数的类型)。