2013-07-16 57 views
7

在C++中,如果我必須從另一個名稱空間調用函數(例如foo),我有兩個選擇:在我的代碼上添加using namespace foo;或在執行調用時指定名稱空間,那就是foo::myFunction()從另一個單元調用沒有「使用」的過程

在德爾福,有沒有一個構造對應於第二個選擇?

+0

我不明白你的C++場景與標題有什麼關係。它們與Delphi中的單元有什麼關係?它們涉及相同的基本詞* use *,但就是這樣。 –

+2

@RobKennedy:Pascal的單位很像一個代碼文件的命名空間。所以,場景是來自C++ POV的有效隱喻。 –

回答

10

不,沒有。如果一個標識符(例如,功能,如myFunction)在單元foo被聲明,則在不同的單元,bar,也就是說,你不能沒有無論是在implemantationinterface部分添加foouses子句中使用myFunction

一些討論

比方說,你有兩個功能MyFunc,一個在foo,一個在bar。假設你在foo。如果您不將add欄設置爲uses列表中的一個,則MyFunc將引用foo.MyFunc,您無法訪問其他功能。如果將bar添加到uses列表之一中,則MyFunc仍將引用本地函數foo.MyFunc,但您可以通過編寫bar.MyFunc來訪問另一個。爲了減少混淆的風險,你可以選擇總是明確的,並寫入foo.MyFuncbar.MyFunc,而不是隻有MyFunc

一個常見的情況是這樣的:你在這兩個foobar有一個標識符ident(他們可能是非常不同的),並在MyUnit,你有一些uses列表都foobar。然後,在MyUnit,ident將參考foo.identbar.ident,,這取決於在使用條款中哪個單元最後出現。要使用另一個,你必須明確單位(如foo.identbar.ident)。當然,爲了減少犯錯的風險,你總是可以明確的(例如,即使foo最後出現,也寫foo.ident,所以ident也指foo.ident)。

一個常見的錯誤是將Windows.TBitmapGraphics.TBitmap混淆。通常,TBitmap是指Graphics.TBitmapWindows單元通常在uses從句中提前)。這個困惑已經在SO處理過了。

+0

好的,謝謝,所以如果我在單位foo和單元欄中都有一個同名的程序,我就擰了? –

+0

Ahem,你似乎以錯誤的順序將topicstarter的「第一」和「第二」選項 –

相關問題