在我的项目中,我使用了一个不断变化的第 3 方库。我有这个库的包装器类(桥接模式 + Pimpl 模式)。因此,除了包装器实现之外,我的任何来源都看不到该库。 这个库有一个 Options 结构,例如
struct Options {
double distance;
double weight;
int num_rabbits;
// etc
};
我希望这个结构在 GUI 模块中可用,以构建一个允许设置这些选项的对话框。我需要为它创建一个包装器结构吗?例如
struct MP_ThatLibOptions {
// exact member copy
double distance;
double weight;
int num_rabbits;
// etc
};
或者我应该直接将该结构头包含到我的源代码中吗?
wrapper 的缺点是:复制粘贴,结构之间转换的额外代码。 direct include 的缺点是:打破了 pimpl 习惯用法。
这个问题是否还有其他解决方案?
另外我想强调的是,第 3 方库在不断变化,因此我必须采用我的源代码来支持库的每个新版本。
最佳答案
Options 结构似乎是公共(public) API 的一部分,而不是 pimpl 习语旨在隐藏的私有(private)实现,因此您似乎应该在源代码中包含 header 。
如果你这样做,当第 3 方代码发生变化时,唯一容易被破坏的代码是直接使用 Options 结构成员的代码,但大概当它发生变化时,你的代码无论如何都需要适本地改变,因为这听起来像是一个 API 更改,所以看起来您已经被覆盖了。
关于c++ - 如何正确包装第 3 方库结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5789672/