【问题标题】:May I declare "using namespace" inside a C++ class?我可以在 C++ 类中声明“使用命名空间”吗?
【发布时间】:2012-03-06 23:05:04
【问题描述】:

假设有一个 C++ 类。还有一个命名空间,应该只在我的班级内可见。该怎么办?

class SomeClass
{
    using namespace SomeSpace;

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

namespace SomeSpace
{
    /*some code*/
};

【问题讨论】:

标签: c++ namespaces


【解决方案1】:

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
    };

};

【讨论】:

  • 嵌套类之所以如此诱人,是因为它们看起来很方便。然而,嵌套类的主要(我认为被低估)的缺点是,与任何其他类成员一样,所有嵌套类的成员都可以完全访问封闭类的所有私有/受保护成员。对于那些不是使用嵌套类的特定目标和原因的情况(也许是大多数?),那么它们基本上会完全破坏封装。
【解决方案2】:

不,但你可以这样做:

namespace SomeSpace
{
    /*some code*/
};

using namespace SomeSpace;

class SomeClass
{

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

虽然不建议在头文件中应用 using namespace 指令,并且通常被认为是一种不好的样式。可以放入类的源文件 (.cpp)。

【讨论】:

  • 我没有看到“使用命名空间 SomeSpace;”之后的效果你在类中使用了命名空间。
猜你喜欢
  • 2020-07-20
  • 1970-01-01
  • 2011-06-14
  • 2023-03-13
  • 2011-09-12
  • 1970-01-01
  • 1970-01-01
  • 2015-07-15
  • 1970-01-01
相关资源
最近更新 更多