спецификатор доступа — версия C ++ защиты пакетов в Java?

Я работаю над графическим кодом для игровой библиотеки на Java. Я сделал пакет под названием com.engine.graphics, В этом пакете у меня есть класс более низкого уровня, называемый VertexArrayObject, Этот класс используется классами уровня клиента, которые будут использовать клиенты; однако я не хочу предоставлять клиентам доступ к VertexArrayObject, поскольку это только усложнит их понимание моей библиотеки. Таким образом, я дал VertexArrayObject спецификатор доступа по умолчанию; таким образом, только классы в com.engine.graphicsиметь доступ к нему, а также говорит клиентам, что им не нужно знать, что это такое.

Так же, как существует это стандартное соглашение для Java, я полагал, что для C ++ должно быть какое-то стандартное соглашение для решения этой проблемы; однако мои поиски в интернете не дали результатов.

Итак, мой вопрос, что такое конвенция? И если его нет, какой подход лучше?

0

Решение

В C ++ нет понятия «пакет», поэтому технически невозможно «защитить пакет». (Есть предложение для модулей, но оно не будет включено даже в грядущий стандарт C ++ 17).

Есть много способов скрыть класс от внешнего мира или ограничить доступ к нему, на уровне синтаксиса вы можете прибегнуть к:

  • вложенные классы который может быть объявлен закрытым (вы должны быть знакомы с ним из Java, за исключением того, что по умолчанию они являются «статическими» и не могут получить доступ к нестатическим членам класса включения) ссылка на сайт;
  • классы друзей которые могут получить доступ к любым частным членам данного класса ссылка на сайт;
  • функции друзей если вы хотите ограничить доступ только к определенным функциям, включая функции-члены другого класса;
  • частное / защищенное наследство где только члены класса знают о наследовании ссылка на сайт.

Наличие большого количества классов и функций друзей — беспорядок, но есть причина требовать явного перечисления их: они нарушают принцип инкапсуляции.

Наконец, вы можете использовать идиому «частной реализации» (иначе pimpl, иначе непрозрачный указатель), который состоит в определении видимого класса, содержащего указатель на класс реализации, и переадресации всех вызовов, пока класс реализации определен в отдельном файле cpp или дизайн фасада.

Выберите то, что кажется подходящим для данного отношения класса. Стандартная библиотека предпочитает вложенные классы, в то время как Qt, популярная графическая библиотека, использует pimpl.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector