2012-02-15 52 views
10

假設有一個C++類。還有一個命名空間應該只在我的類中可見。該怎麼做?我可以在C++類中聲明「using namespace」嗎?

class SomeClass 
{ 
    using namespace SomeSpace; 

public: 
    void Method1(); 
    void Method2(); 
    void Method3(); 
}; 

namespace SomeSpace 
{ 
    /*some code*/ 
}; 
+1

你究竟是什麼意思?命名空間不像私人/公共。 – KillianDS 2012-02-15 15:55:12

+0

一種選擇是將類*放在名稱空間內。如果它很大程度上取決於該名稱空間,爲什麼它在外面? – 2012-02-15 16:11:38

+0

[爲什麼我不能在類聲明中使用「using」聲明?](https://stackoverflow.com/questions/2134844/why-cant-i-put-a-using-declaration-inside -a類聲明) – 2017-07-02 13:54:28

回答

7

using namespace X;被稱爲using directive,它只能出現在命名空間和功能範圍,而不是類範圍。所以你想要做的事情在C++中是不可能的。你可以做的最好的事情是將using指令寫入該類名稱空間的範圍中,這可能並不理想。

關於第二個想法,不過,分析你的話,

假設有一個C++類。還有一個命名空間應該是 只在我的課堂內可見。該怎麼做?

我建議像下面這樣的東西,我不確定是你想要的。

class A 
{ 
public: 
    void Method1(); 
    void Method2(); 
    void Method3(); 

private: 

    class B 
    { 
     //public static functions here, instead of namespace-scope 
     // freestanding functions. 
     //these functions will be accessible from class A(and its friends, if any) 
     //because B is private to A 
    }; 

}; 
+0

嵌套類可以很誘人,因爲它們看起來有多方便。然而,主要的 - 我認爲低報 - 嵌套類的缺點是,像任何其他類成員一樣,所有嵌套類的成員都可以完全訪問封閉類的所有私有/受保護成員。對於那些不是使用嵌套類的具體目標和原因的情況(也許是大多數?),那麼它們基本上完全破壞了封裝。 – 2017-05-24 22:12:39

0

沒有,但你可以做到這樣的:

namespace SomeSpace 
{ 
    /*some code*/ 
}; 

using namespace SomeSpace; 

class SomeClass 
{ 

public: 
    void Method1(); 
    void Method2(); 
    void Method3(); 
}; 

雖然不建議任何應用使用namespace指令在頭文件,而且通常被視爲不良作風。放入你的類的源文件(.cpp)是可以的。

相關問題