控制命名空间中的访问

时间:2011-11-01 15:59:54

标签: c++ namespaces

我编写了一个由主要命名空间组成的静态库。如何控制对该命名空间中的类的访问?例如,如果我希望内部的所有类都是“私有”,并且只有少数接口函数可以访问。有任何想法吗?我可以这样做:

namespace{
    public:
        void startSomeProcess();
    private:
    // global variables
        class Priv{};
}

3 个答案:

答案 0 :(得分:4)

命名空间没有访问说明符,您不能这样做。

访问说明符仅适用于类/结构。

如果您不想公开某些类,请不要将它们放在您向用户公开的头文件中,如果用户看不到某个类,则他们将不会使用它。

“NmspPublic.h”与他人分享

namespace Nmsp {
    void startSomeProcess();
}

“NmspPrivate.h”保持内部

#inlcude "NmspPublic.h"
namespace Nmsp {
        class Priv{};
}

答案 1 :(得分:0)

将“私有”原型移出头文件并将函数声明为静态应该这样做。

答案 2 :(得分:0)

您不能在命名空间中放置访问说明符。你可以做的是在命名空间中创建一个类,并在类中放置静态方法。

class AccessControl {
public:
    static void startSomeProcess();

private:
    class Priv {};
};

并使用Priv中的朋友说明符来控制访问。