在C++中,如果我必須從另一個名稱空間調用函數(例如foo
),我有兩個選擇:在我的代碼上添加using namespace foo;
或在執行調用時指定名稱空間,那就是foo::myFunction()
。從另一個單元調用沒有「使用」的過程
在德爾福,有沒有一個構造對應於第二個選擇?
在C++中,如果我必須從另一個名稱空間調用函數(例如foo
),我有兩個選擇:在我的代碼上添加using namespace foo;
或在執行調用時指定名稱空間,那就是foo::myFunction()
。從另一個單元調用沒有「使用」的過程
在德爾福,有沒有一個構造對應於第二個選擇?
不,沒有。如果一個標識符(例如,功能,如myFunction
)在單元foo
被聲明,則在不同的單元,bar
,也就是說,你不能沒有無論是在implemantation
或interface
部分添加foo
到uses
子句中使用myFunction
。
一些討論
比方說,你有兩個功能MyFunc
,一個在foo
,一個在bar
。假設你在foo
。如果您不將add
欄設置爲uses
列表中的一個,則MyFunc
將引用foo.MyFunc
,您無法訪問其他功能。如果將bar
添加到uses
列表之一中,則MyFunc
仍將引用本地函數foo.MyFunc
,但您可以通過編寫bar.MyFunc
來訪問另一個。爲了減少混淆的風險,你可以選擇總是明確的,並寫入foo.MyFunc
和bar.MyFunc
,而不是隻有MyFunc
。
一個常見的情況是這樣的:你在這兩個foo
和bar
有一個標識符ident
(他們可能是非常不同的),並在MyUnit
,你有一些uses
列表都foo
和bar
。然後,在MyUnit
,ident
將參考foo.ident
或bar.ident
,,這取決於在使用條款中哪個單元最後出現。要使用另一個,你必須明確單位(如foo.ident
或bar.ident
)。當然,爲了減少犯錯的風險,你總是可以明確的(例如,即使foo
最後出現,也寫foo.ident
,所以ident
也指foo.ident
)。
一個常見的錯誤是將Windows.TBitmap
與Graphics.TBitmap
混淆。通常,TBitmap
是指Graphics.TBitmap
(Windows
單元通常在uses
從句中提前)。這個困惑已經在SO處理過了。
好的,謝謝,所以如果我在單位foo和單元欄中都有一個同名的程序,我就擰了? –
Ahem,你似乎以錯誤的順序將topicstarter的「第一」和「第二」選項 –
我不明白你的C++場景與標題有什麼關係。它們與Delphi中的單元有什麼關係?它們涉及相同的基本詞* use *,但就是這樣。 –
@RobKennedy:Pascal的單位很像一個代碼文件的命名空間。所以,場景是來自C++ POV的有效隱喻。 –