大型 C++ 项目中的一个问题可能是构建时间。在你的依赖树中有一些你需要处理的类,但通常你会避免这样做,因为每次构建都需要很长时间。你不一定想改变它的公共(public)接口(interface),但也许你想改变它的私有(private)成员(添加一个缓存变量,提取一个私有(private)方法,......)。您面临的问题是,在 C++ 中,即使是私有(private)成员也是在公共(public)头文件中声明的,因此您的构建系统需要重新编译所有内容。
遇到这种情况你会怎么做?
我列出了两个我知道的解决方案,但它们都有缺点,也许还有一个我还没有想到的更好的解决方案。
最佳答案
疙瘩图案:
在您的头文件中,仅声明公共(public)方法和私有(private)指针(pimpl 指针或委托(delegate))到前向声明的实现类。
在您的源代码中,声明实现类,将公共(public)类的每个公共(public)方法转发给委托(delegate),并在公共(public)类的每个构造函数中构造一个 pimpl 类的实例。
加上:
- 允许您更改类的实现而无需重新编译所有内容。
- 继承效果很好,只是语法有点不同。
减去:
- 要编写大量愚蠢的方法体来进行委托(delegate)。
- 调试起来有点尴尬,因为您有大量委托(delegate)要逐步完成。
- 基类中的额外指针,如果您有很多小对象,这可能是个问题。
关于c++ - 您使用什么模式来分离 C++ 中的接口(interface)和实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/973000/