1

我对从桥接模式重新编译的好处有些困惑。

例如,为什么在我们更改实现时制作抽象实现接口有助于客户端代码不重新编译?我猜对于包含“window.h”的客户端,其中包含“windowImp.h”最终将在预处理器过程中将这两个类的所有部分添加到客户端代码中。

有人可以解释一下编译器如何编译每个单元以及何时更改实现的好处,为什么只需要客户端重新链接?

4

1 回答 1

2

编译器基本上单独编译每个 cpp 文件,然后链接输出。如果您现在更改此 cpp 中使用的包含之一或 cpp 本身,则需要重新编译该 cpp(如果您执行增量构建)。

假设您的 cpp 文件 foo.cpp 包含标题 bar.h。bar.h 定义了一个类 foobar。如果现在更改 foobar 的私有变量(实现细节),则需要重新编译 foo.cpp。如果您创建一个抽象基类(例如 ibar.h 中的 Ifoobar),foo.cpp 现在可以包含 ibar.h。如果您现在更改 bar.h 的实现细节,它不会强制重新编译 foo.cpp。假设这个类 foobar 用在了数千个文件中,你节省了大量的编译时间。

问候托拜厄斯

于 2014-03-26T22:59:39.507 回答