| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Скрыть приватную область класса |
| Автор: semibug 9.1.2011, 11:33 |
| В заголовочном файле находится объявление класса. В приватной секции используются типы, описанные в другом заголовочном файле (TerribleDefs.h). Пользователи класса используют публичные функции-члены, но вынуждены так же иметь доступ к модулю TerribleDefs.h. Варианты: - создать дополнительный класс-интерфейс, в котором будут описаны только публичные методы, и от него наследовать рабочий класс, пользователям достаточно включения только класса интерфейса. - в заголовочном файле, в описании класса, в приватных секциях использовать типы void*, в реализации приводить к нужным. Оба способа, imho, не попадают под определение "элегантный". Как обходитесь в такой ситуации вы? |
| Автор: azesmcar 9.1.2011, 11:42 |
| http://en.wikipedia.org/wiki/Opaque_pointer |
| Автор: semibug 9.1.2011, 12:15 |
| azesmcar, гуд, спасибо! |
| Автор: Earnest 10.1.2011, 11:50 |
| На мой взгляд, первый вариант (отделить интерфейс) вполне элегантный и практически эквивалентен варианту PIMPL. Выбор зависит от задачи, доп. условий и личных предпочтений. Доп. условия - это, например: - желательно не использовать виртуальные функции -> используем PIMPL; - есть легкое ощущение, что в будущем потребуются различные реализации -> интерфейс. Кстати, под "интерфейсом" можно понимать не только набор чисто-виртуальных функций. Например, есть набор параметров какого-либо процесса, с которым удобнее работать как со структурой. Но использующему ее коду совершенно не нужно знать как эти данные хранятся и добываются. В таком случае я объявляю в интерфейсном файле структуру с нужными полями и статической функцией Instanсe, возможно с параметром. А реализуется этот набор параметров как производная от какого-нибудь класса, который умеет храниться в профиле или где-то еще... |