2013-03-27 6 views
4

Я пишу библиотеку на C++. Все классы и глобальная функция объявляются внутри пространства имен mylibrary. Мне нужно создать только некоторые классы для внутреннего использования: кто будет использовать эту библиотеку, должен немедленно заметить, какие классы не предназначены для использования вне библиотеки. К сожалению, я не могу использовать частную функцию, потому что это испортит всю инкапсуляцию. Я не могу использовать частные классы, потому что к внутренним классам нужно обращаться «нормальными» классами в одной и той же библиотеке.C++ библиотека «внутреннее использование только» стиль кодирования

Я думаю, что хороший способ сделать это - создать пространство имен mylibrary::internal и положить в него все «частные» вещи. Правильно ли это? Существуют ли другие общие способы?

+0

Будет ли эта библиотека открыта? –

+1

Ваш путь - общий путь. И не так. :) –

+0

Вот как это делается, поэтому, вероятно, это лучшая практика в C++ – antlersoft

ответ

4

Используйте анонимное пространство имен для своей внутренней функциональности. Это гарантирует, что внешний код не сможет ссылаться на него. Подробнее читайте здесь: anonymous namespace

+1

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

+0

Я думаю, что это не то, что я ищу, потому что есть «внутренний» API: некоторым классам в одной библиотеке нужно обращаться к внутренним классам. –

+0

Пит Беккер прав, я не могу использовать пространство имен anonymouse из-за организации кода в нескольких исходных файлах. –