如何限制在声明它的命名空间之外的类的可见性?

时间:2012-03-25 08:14:32

标签: c++

我在c ++中有一个包含5个类的命名空间。所有这些都有public访问修饰符。其中,2个类是static个类。

我想限制这些类在声明它们的命名空间之外可见。

所以,就像在另一个名称空间中一样,如果我导入这个名称空间,那么这两个类就不应该可以使用了。

3 个答案:

答案 0 :(得分:2)

C ++中没有静态类。如果 static classes 是指代码中其他类使用的辅助类,并且不打算由客户端代码使用,那么您可以使用未命名的命名空间,并在其中定义辅助类。 / p>

namespace somespace
{
    namespace   //it is unnamed namespace
    {
           class helper
           {
               //define it here
           };
    }
    class A
    {
          helper m_helper;
    };
}

Boost也使用另一种技术。它定义名为details的名称空间中的所有辅助类。

namespace somespace
{
    namespace details  //it is details namespace
    {
           class helper
           {
               //define it here
           };
    }
    class A
    {
          details::helper m_helper;  //use fully-qualified name
    };
}

答案 1 :(得分:2)

有两种方法可以防止在c ++中使用类,第一种方法是将这些类设为私有并嵌套在您要使用它们的类中。

class User{
private:
  class Internal{};
};

第二种可能性是让你的类的构造函数为private,并声明友好类,它们可以像以下一样使用它:

class Internal{
private:
 friend class User;
 Internal(){}
public:
 //class interface.
};

答案 2 :(得分:1)

我会尝试将两个静态类放在另一个名称空间中,并使这个名称空间在其他5个类的实现文件中可用。 如果您提供最少的示例源,可能会有更多想法。