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

__traitsstd.traits良いものがたくさんありますが、必ずしも完全ではありません。__traitsそのため、またはで検査できると本当に思うものを見つけた場合は、 拡張リクエスト を作成してstd.traitsください。

さて、そうは言っても、 をチェックする方法があるのは本当に意味がありませんininは と同じで、をチェックできるconst scope場合は、それも一致する必要があります。本当に、あなたは気にしますか、それとも気にしますか?それとも両方気にしますか?ではなく、それらをチェックしてください。inconst scopeconstscopein

ただし、残念ながら、現時点では、scopeいつin使用されたかを確認することは実際には機能していません。std.traits.ParameterStorageClassTupleパラメーターのストレージ クラス (none、、、、、および/または) を取得するために使用できますがscope、現在のところout、. だから、今のところ、あなたは運が悪いです。ただし、バグは報告されています。reflazyscopein

constただし、次のようなことを行うことでまだ確認できますis(T == const)(場所Tは、確認しているパラメーターの型です)。

于 2012-09-20T00:33:19.580 に答える