0

在我的项目中,我使用了一个不断变化的 3rd 方库。我有这个库的包装类(桥模式 + 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
};

或者我应该直接将该结构标头包含到我的源代码中吗?

包装器的缺点是:复制粘贴,用于在结构之间转换的附加代码。直接的缺点包括:打破 pimpl 成语。

这个问题可能还有其他解决方案吗?

另外我想强调的是,第 3 方库是不断变化的,所以我必须采用我的资源来支持库的每个新版本。

4

2 回答 2

1

Options 结构似乎是公共 API 的一部分,而不是 pimpl 惯用语旨在隐藏的私有实现,因此您似乎应该在源代码中包含标头。

如果您这样做,那么当第 3 方代码更改时,唯一可能会损坏的代码是直接使用 Options 结构成员的代码,但大概当它发生更改时,您的代码无论如何都需要适当更改,因为这听起来像这将是一个 API 更改,所以看起来你已经被覆盖了。

于 2011-04-26T11:45:42.997 回答
1

当我使用 Bridge + pimpl 模式时,我决定完全隐藏 3rd 方库。

于 2012-02-01T13:43:47.787 回答