假设有一个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