2016-09-14 29 views
3

我想整齊地聲明名稱空間本地的函數和變量,所以只有名稱空間成員才能訪問它們。C++如何在命名空間中創建一個本地函數/變量?

在lua中,我將使用「本地」關鍵字來執行此操作(在文件/函數中)。 C++中可能有任何相關的東西嗎?

編輯

這裏是我的代碼僞C++樣本:

namespace wld { 
    const int wldDivis = 4; 
    void myFunc(){ 
     // wldDivis constant used here 
    } 
    void myFunc2(){ 
     // wldDivis also used here 
    } 
} 

// Somewhere later 
wld::myFunc(); 
wld::myFunc2(); 

變量 「wldDivis」 只能用在命名空間中使用WLD。我如何將外部命名空間wld本地化/「使其不可見」作爲「強制不透明」,如果其他人可能會使用我的函數的內部工作?命名空間是否合適?

IE無法訪問以外的命名空間

+1

也許'static'關鍵字是你想要的,或者匿名命名空間 – user2807083

+0

「本地命名空間」。沒有這樣的事情。無論如何,這將是無用的,因爲namesoaces是開放的。您始終可以將自己的功能添加到任何名稱空間。 –

回答

2

AFAIK在C++的命名空間中沒有訪問限制。

namespace foo { 
    void local_func() {} 

    // local_func can be accessed inside the namespace 

    void global_func() { local_func(); } 
} 

// ... 

foo::local_func(); // local_func can be accessed outside the namespace 

可以實現的東西密切與靜態成員函數的類定義:

class foo { 
    private: 
     static void local_func() {} 

    public: 
     // local_func can be accessed inside the "namespace" of the class 

     void global_func() { local_func(); } 
}; 

// ... 

foo::local_func(); // error : local_func is private to the class 
3

在命名空間中聲明的變量可以使用限定符(mynamespace :: myvariable)從外部訪問。例如,這是您可以訪問std :: cout的方式。

可以訪問類中通過公共私人保護關鍵字來控制。

的可能(和笨拙)解決將是把你的「全局」一類的內部設有私人入口,然後使這個類朋友與命名空間中的其他類和功能。這不僅是一個噩夢要維護,而且如果不是從的朋友也不可能訪問這些全局變量。另一方面,巧妙地聲明你的函數(所以它們在命名空間中定義的類上運行,只執行相關的功能)將立即解決問題:所有事情都是可訪問的,因爲它需要這樣做。

當然,還有更多有經驗的編碼器,所以也許有人可以用文件級別的可見性,「extern」關鍵字等等(我記得這些是舊C中的東西)。無論如何,是否有可能向我們提供您的代碼樣本以更好地瞭解該主題?

+0

Re:「可以通過公共,私人和受保護的關鍵字在類內控制可見性。」 - 沒有。 **訪問**和**可見性**是兩件不同的事情。關鍵字public等控制**訪問**。私人名字仍然**可見**。 –

+0

@PeteBecker是的,絕對正確。對於混淆抱歉,但英語不是我的母語,事情往往會變得混亂。將立即編輯。 –

相關問題