Я просто заметил новый термин pimpl идиома, каково различие между этой идиомой с шаблоном разработки Моста? Я смущен этим.
Я также заметил, что pimpl идиома всегда используется для функции подкачки, что это? Кто-либо мог дать мне пример?
PIMPL - это способ сокрытия реализации, в первую очередь для разрушения зависимостей компиляции.
С другой стороны, шаблон «Мост» - это способ поддержки нескольких реализаций.
swap
- это стандартная функция C ++ для обмена значениями двух объектов. Если вы меняете указатель на реализацию на другую реализацию, вы по существу меняете механизм класса во время выполнения.
Но в своей базовой и общей форме класс, использующий PIMPL, указывает на единственную реализацию, поэтому не существует абстрактного класса с отдельными подклассами - только один класс, объявленный вперед и скомпилированный где-то еще. Изменение класса реализации не требует перекомпиляции источников, включающих основной заголовок.
Например, предположим, что у вас есть много частных функций-членов, частных перечислений и частных данных. И эти частные "биты" довольно часто меняются по мере развития и поддержки класса. Если зависимости #include
таковы, что прикосновение к этому файлу заголовка вызывает перекомпиляцию большого количества источников, у вас есть хороший кандидат для PIMPL.
Итак, паттерн «мост» касается объектно-ориентированного проектирования, а идиома PIMPL - о физическом проектировании файлов.
(Чтобы узнать больше о физическом проектировании, я рекомендую книгу Джона Лакоса Крупномасштабное проектирование программного обеспечения C ++ .)
Ну, вот идиома PIMPL: http://en.wikipedia.org/wiki/Opaque_pointer Довольно ясно, что это делает.
И шаблон моста более сложен - он не просто хранит данные. http://en.wikipedia.org/wiki/Bridge_pattern#C.2B.2B
Я использовал указатель impl, чтобы скрыть детали реализации из общедоступного интерфейса / включаемого файла В основном интерфейс выглядит так :
struct Interface {
private:
class Impl;
Impl *pImpl;
};
Затем где-то внутри Interface :: Impl
определен и реализован, но подробности не раскрываются.
Что касается свопа, то слышу впервые. Не могли бы вы подробнее рассказать?