2012-02-15 50 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)是可以的。

相关问题