У меня есть некоторая путаница в пользу перекомпиляции из шаблона моста.
Например, почему создание абстрактного интерфейса реализации поможет клиентскому коду не перекомпилироваться, когда мы изменим реализацию? Я предполагаю, что для клиента, который включает в себя «window.h», который включает «windowImp.h», в конечном итоге все части этих двух классов будут добавлены в код клиента во время процесса препроцессора.
Может кто-нибудь объяснить, пожалуйста, с точки зрения того, как компилятор компилирует каждый модуль и когда изменяется реализация, почему просто требуется, чтобы клиент повторно связался?
Компилятор в основном компилирует каждый файл cpp индивидуально, а затем связывает вывод. Если вы теперь измените одно из включений, используемых в этом cpp или в самом cpp, вам нужно перекомпилировать этот cpp (если вы делаете инкрементную сборку).
Давайте предположим, что ваш файл cpp foo.cpp содержит заголовок bar.h. bar.h определяет класс foobar. Если вы сейчас измените приватную переменную (детали реализации) foobar, вам нужно перекомпилировать foo.cpp. Если вы создаете абстрактный базовый класс (например, ifoobar в ibar.h), foo.cpp теперь может включать ibar.h. Если вы сейчас измените детали реализации bar.h, это не приведет к перекомпиляции foo.cpp. Предположим, что этот класс foobar используется в тысячах файлов, и вы сэкономили много времени на компиляцию.
С уважением
Тобиас
Других решений пока нет …