假設有一個C++類。還有一個命名空間應該只在我的類中可見。該怎麼做?我可以在C++類中聲明「using namespace」嗎?
class SomeClass
{
using namespace SomeSpace;
public:
void Method1();
void Method2();
void Method3();
};
namespace SomeSpace
{
/*some code*/
};
假設有一個C++類。還有一個命名空間應該只在我的類中可見。該怎麼做?我可以在C++類中聲明「using namespace」嗎?
class SomeClass
{
using namespace SomeSpace;
public:
void Method1();
void Method2();
void Method3();
};
namespace SomeSpace
{
/*some code*/
};
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
};
};
嵌套類可以很誘人,因爲它們看起來有多方便。然而,主要的 - 我認爲低報 - 嵌套類的缺點是,像任何其他類成員一樣,所有嵌套類的成員都可以完全訪問封閉類的所有私有/受保護成員。對於那些不是使用嵌套類的具體目標和原因的情況(也許是大多數?),那麼它們基本上完全破壞了封裝。 – 2017-05-24 22:12:39
沒有,但你可以做到這樣的:
namespace SomeSpace
{
/*some code*/
};
using namespace SomeSpace;
class SomeClass
{
public:
void Method1();
void Method2();
void Method3();
};
雖然不建議任何應用使用namespace指令在頭文件,而且通常被視爲不良作風。放入你的類的源文件(.cpp)是可以的。
你究竟是什麼意思?命名空間不像私人/公共。 – KillianDS 2012-02-15 15:55:12
一種選擇是將類*放在名稱空間內。如果它很大程度上取決於該名稱空間,爲什麼它在外面? – 2012-02-15 16:11:38
[爲什麼我不能在類聲明中使用「using」聲明?](https://stackoverflow.com/questions/2134844/why-cant-i-put-a-using-declaration-inside -a類聲明) – 2017-07-02 13:54:28