2012-03-25 43 views
0

我在C++中有一個包含5個類的名稱空間。他們都有public訪問修飾符。其中,2班是static班。如何限制類聲明之外的名稱空間的可見性?

我想限制這些類在它們聲明的名稱空間外部可見。

因此,就像在另一個命名空間中一樣,如果我導入這個命名空間,那麼這兩個類就不應該可用。

+0

有沒有靜態類在C++中。那麼你的意思是什麼?「2類是靜態類」*? – Nawaz 2012-03-25 08:21:25

回答

1

我會嘗試將兩個靜態類放入另一個名稱空間,並使該名稱空間在其他5個類的實現文件中可用。 如果您提供最少的示例源代碼,可以提供更多創意。

2

C++中沒有靜態類。如果按照靜態類別您的意思是代碼中其他類使用的助手類,並且不打算由客戶端代碼使用,那麼您可以使用未命名的命名空間,並在其中定義助手類。

namespace somespace 
{ 
    namespace //it is unnamed namespace 
    { 
      class helper 
      { 
       //define it here 
      }; 
    } 
    class A 
    { 
      helper m_helper; 
    }; 
} 

Boost也使用了另一種技術。它定義了名爲details的所有幫助類。

namespace somespace 
{ 
    namespace details //it is details namespace 
    { 
      class helper 
      { 
       //define it here 
      }; 
    } 
    class A 
    { 
      details::helper m_helper; //use fully-qualified name 
    }; 
} 
+0

我似乎能夠使用'somespace :: helper'在名稱空間外部訪問該隱藏類。我誤解了一些東西嗎? – 2013-01-10 13:41:22

+0

@ Deidara-senpai:你不能從* other *翻譯單位那樣做。來自未命名名稱空間的名稱不能從其他翻譯單元訪問。這就是這個答案的要點。 – Nawaz 2013-01-10 13:42:34

+0

這是否也適用於標題或僅鏈接的實現文件? – jiggunjer 2015-07-24 16:37:25

1

有2種可能性,以防止在C++中使用類,第一種是使這些類私人和嵌套,你去使用它們的類中。

class User{ 
private: 
    class Internal{}; 
}; 

第二種可能性是讓你的類的構造函數的私人並聲明這將是能夠使用它,喜歡的朋友類:

class Internal{ 
private: 
friend class User; 
Internal(){} 
public: 
//class interface. 
}; 
相關問題