Контролировать доступ в пространстве имен? - PullRequest
1 голос
/ 01 ноября 2011

Я написал статическую библиотеку, которая состоит из основного пространства имен.Как я могу контролировать доступ к классам в этом пространстве имен?Например, если бы я хотел, чтобы все классы внутри были «частными», и были доступны только несколько интерфейсных функций.Есть идеи?Могу ли я сделать что-то вроде этого:

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

Ответы [ 3 ]

4 голосов
/ 01 ноября 2011

Для пространства имен нет спецификаторов доступа, вы не можете этого сделать.

Спецификаторы доступа предназначены только для класса / структуры.

Если вы не хотите предоставлять определенные классы, не помещайте их в заголовочный файл, который вы предоставляете пользователям, Если пользователи не могут видетькласс существует, они не будут его использовать.

"NmspPublic.h", чтобы поделиться с другими

namespace Nmsp {
    void startSomeProcess();
}

"NmspPrivate.h" для внутреннего хранения

#inlcude "NmspPublic.h"
namespace Nmsp {
        class Priv{};
}
0 голосов
/ 01 ноября 2011

Вы не можете поместить спецификаторы доступа в пространство имен. Что вы можете сделать, это создать класс в пространстве имен и разместить статические методы внутри класса.

class AccessControl {
public:
    static void startSomeProcess();

private:
    class Priv {};
};

И используйте спецификаторы друзей в Priv для управления доступом.

0 голосов
/ 01 ноября 2011

Перемещение «приватных» прототипов из файла заголовка и объявление функций как статических должно сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...