идиома pimpl по сравнению с шаблоном разработки моста

Я просто заметил новый термин pimpl идиома, каково различие между этой идиомой с шаблоном разработки Моста? Я смущен этим.

Я также заметил, что pimpl идиома всегда используется для функции подкачки, что это? Кто-либо мог дать мне пример?

29
задан skydoor 27 February 2010 в 03:55
поделиться

3 ответа

PIMPL - это способ сокрытия реализации, в первую очередь для разрушения зависимостей компиляции.

С другой стороны, шаблон «Мост» - это способ поддержки нескольких реализаций.

swap - это стандартная функция C ++ для обмена значениями двух объектов. Если вы меняете указатель на реализацию на другую реализацию, вы по существу меняете механизм класса во время выполнения.

Но в своей базовой и общей форме класс, использующий PIMPL, указывает на единственную реализацию, поэтому не существует абстрактного класса с отдельными подклассами - только один класс, объявленный вперед и скомпилированный где-то еще. Изменение класса реализации не требует перекомпиляции источников, включающих основной заголовок.

Например, предположим, что у вас есть много частных функций-членов, частных перечислений и частных данных. И эти частные "биты" довольно часто меняются по мере развития и поддержки класса. Если зависимости #include таковы, что прикосновение к этому файлу заголовка вызывает перекомпиляцию большого количества источников, у вас есть хороший кандидат для PIMPL.

Итак, паттерн «мост» касается объектно-ориентированного проектирования, а идиома PIMPL - о физическом проектировании файлов.

(Чтобы узнать больше о физическом проектировании, я рекомендую книгу Джона Лакоса Крупномасштабное проектирование программного обеспечения C ++ .)

49
ответ дан 28 November 2019 в 01:27
поделиться

Ну, вот идиома PIMPL: http://en.wikipedia.org/wiki/Opaque_pointer Довольно ясно, что это делает.

И шаблон моста более сложен - он не просто хранит данные. http://en.wikipedia.org/wiki/Bridge_pattern#C.2B.2B

0
ответ дан 28 November 2019 в 01:27
поделиться

Я использовал указатель impl, чтобы скрыть детали реализации из общедоступного интерфейса / включаемого файла В основном интерфейс выглядит так :

struct Interface {
private:
class Impl;
Impl *pImpl;
};

Затем где-то внутри Interface :: Impl определен и реализован, но подробности не раскрываются.

Что касается свопа, то слышу впервые. Не могли бы вы подробнее рассказать?

3
ответ дан 28 November 2019 в 01:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: