Где pimpl используется в приложениях / библиотеках C++? какие-нибудь примеры?
Идиома pimpl позволяет уменьшить зависимости компиляции в проектах и одновременно иметь бинарную совместимость.
Другими словами, вы можете изменить частную реализацию класса без необходимости перекомпиляции клиентского кода.
Где я могу найти примеры такого подхода? Знаете ли вы какие-либо библиотеки с открытым исходным кодом или приложения, которые его используют?
Я знаю о QT и Poco:
- D-Pointer - Qt Wiki
- poco / IPAddress.h при разработке · pocoproject / poco (но правильно ли включать файл заголовка 'impl' в файл заголовка 'public'? Любое изменение в этом приватном impl вызовет перекомпиляцию).
1 ответ
Где я могу найти примеры такого подхода? Знаете ли вы какие-либо библиотеки с открытым исходным кодом или приложения, которые его используют?
Qt. Пример конкретного модуля: QGraphicsItem.cpp, заполненный d_ptr
, Интерфейс частной части. Все это касается как государственных, так и частных модулей.
Частная реализация имеет большой смысл в случае переноса всей библиотеки / фреймворка на другую платформу. Вы просто помещаете различные файлы для реализации, сохраняя открытый интерфейс как есть. И реализация доступна через d_ptr->
,
Для любопытных: не-Qt Pimpl C++ 11 пример.