C++ で、別の名前空間から関数を呼び出さなければならない場合、たとえばの場合、上記のコードfoo
を追加するusing namespace foo;
か、呼び出しを実行するときに名前空間を指定するか、つまりfoo::myFunction()
.
Delphi では、2 番目の選択肢に対応する構造はありますか?
C++ で、別の名前空間から関数を呼び出さなければならない場合、たとえばの場合、上記のコードfoo
を追加するusing namespace foo;
か、呼び出しを実行するときに名前空間を指定するか、つまりfoo::myFunction()
.
Delphi では、2 番目の選択肢に対応する構造はありますか?
いいえ、ありません。識別子 ( のような関数などmyFunction
) が unit で宣言されfoo
ている場合、別のユニットでは、たとえば、の節またはセクションの節に追加せずにbar
使用することはできません。myFunction
foo
uses
implemantation
interface
いくつかの議論
2 つの関数があるとしますMyFunc
。1 つは in でfoo
、もう 1 つはbar
です。にいるとしましょうfoo
。add
いずれかのuses
リストにアクセスしないと、MyFunc
は を参照しfoo.MyFunc
、他の機能にアクセスできません。リストbar
の 1 つに追加しても、は引き続きローカル関数を参照しますが、 と書くことでもう一方にアクセスできます。混乱のリスクを軽減するために、常に明示的に記述して and を記述し、決してだけを記述しないように選択できます。uses
MyFunc
foo.MyFunc
bar.MyFunc
foo.MyFunc
bar.MyFunc
MyFunc
一般的なシナリオは次のとおりです。 とident
の両方foo
で識別子を取得しbar
(それらは大きく異なる可能性があります)、 では と の両方MyUnit
がリストに含まれています。次に、 inは、 uses 句の最後に来るユニットに応じて、またはのいずれかを参照します。他のものを使用するには、単位について明示する必要があります (またはのように)。もちろん、間違いを犯すリスクを減らすために、いつでも明示的にすることができます (たとえば、最後に来る場合でも書いて、も参照するようにします)。foo
bar
uses
MyUnit
ident
foo.ident
bar.ident
foo.ident
bar.ident
foo.ident
foo
ident
foo.ident
よくある間違いは、 と混同Windows.TBitmap
することGraphics.TBitmap
です。通常、TBitmap
参照しますGraphics.TBitmap
(単位は通常節Windows
の最初に来ます)。uses
この混乱は SO で処理されています。