7

C++ で、別の名前空間から関数を呼び出さなければならない場合、たとえばの場合、上記のコードfooを追加するusing namespace foo;か、呼び出しを実行するときに名前空間を指定するか、つまりfoo::myFunction().

Delphi では、2 番目の選択肢に対応する構造はありますか?

4

1 に答える 1

10

いいえ、ありません。識別子 ( のような関数などmyFunction) が unit で宣言されfooている場合、別のユニットでは、たとえば、の節またはセクションの節に追加せずにbar使用することはできません。myFunctionfoousesimplemantationinterface

いくつかの議論

2 つの関数があるとしますMyFunc。1 つは in でfoo、もう 1 つはbarです。にいるとしましょうfooaddいずれかのusesリストにアクセスしないと、MyFuncは を参照しfoo.MyFunc、他の機能にアクセスできません。リストbarの 1 つに追加しても、は引き続きローカル関数を参照しますが、 と書くことでもう一方にアクセスできます。混乱のリスクを軽減するために、常に明示的に記述して and を記述し、決してだけを記述しないように選択できます。usesMyFuncfoo.MyFuncbar.MyFuncfoo.MyFuncbar.MyFuncMyFunc

一般的なシナリオは次のとおりです。 とidentの両方fooで識別子を取得しbar(それらは大きく異なる可能性があります)、 では と の両方MyUnitがリストに含まれています。次に、 inは、 uses 句の最後に来るユニットに応じて、またはのいずれかを参照します。他のものを使用するには、単位について明示する必要があります (またはのように)。もちろん、間違いを犯すリスクを減らすために、いつでも明示的にすることができます (たとえば、最後に来る場合でも書いて、も参照するようにします)。foobarusesMyUnitidentfoo.identbar.identfoo.identbar.identfoo.identfooidentfoo.ident

よくある間違いは、 と混同Windows.TBitmapすることGraphics.TBitmapです。通常、TBitmap参照しますGraphics.TBitmap(単位は通常節Windowsの最初に来ます)。usesこの混乱は SO で処理されています。

于 2013-07-16T15:51:25.863 に答える