我在c ++中有一个包含5个类的命名空间。所有这些都有public
访问修饰符。其中,2个类是static
个类。
我想限制这些类在声明它们的命名空间之外可见。
所以,就像在另一个名称空间中一样,如果我导入这个名称空间,那么这两个类就不应该可以使用了。
答案 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个类的实现文件中可用。 如果您提供最少的示例源,可能会有更多想法。