0

我是D新手,所以我可能会完全搞错,请赐教!

据我从文档中了解到, 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装饰的特征?

4

1 回答 1

3

__traits里面std.traits有很多好东西,但不一定是完整的。因此,如果您发现您确实认为应该可以使用__traitsor进行检查的内容std.traits,请创建增强请求

现在,话虽如此,有一种方法来检查in. in是一样的const scope,如果你可以检查in,那么const scope也必须匹配它。真的,你在乎const还是在乎scope?还是你都在乎?检查那些,而不是in.

scope但是,不幸的是,目前,检查何时使用实际上并不起作用instd.traits.ParameterStorageClassTuple可用于获取参数的存储类(无、、、、scope和/或) out,但目前无法为. 所以,就目前而言,你运气不好。该错误已被报告。reflazyscopein

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

于 2012-09-20T00:33:19.580 回答