0

私のプロジェクトでは、絶えず変化するサードパーティのライブラリを使用しています。このライブラリのラッパークラス(ブリッジパターン+ 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
};

または、その構造体ヘッダーをソースに直接含める必要がありますか?

ラッパーの欠点は次のとおりです。コピー-貼り付け、構造体間で変換するための追加コード。直接の欠点は次のとおりです。単純なイディオムを破る。

この問題に対する他の解決策はありますか?

また、サードパーティのライブラリは絶えず変化していることを強調したいので、ライブラリのすべての新しいバージョンをサポートするためにソースを採用する必要があります。

4

2 に答える 2

1

Options構造体はパブリックAPIの一部であり、pimplイディオムが非表示にするように設計されているプラ​​イベート実装ではないように見えるため、ソースにヘッダーを含める必要があるように思われます。

これを行うと、サードパーティのコードが変更されたときに破損する可能性がある唯一のコードは、Options構造体のメンバーを直接使用するコードですが、おそらくそれが変更された場合は、コードが適切に変更される必要があります。 APIの変更になるので、カバーされているようです。

于 2011-04-26T11:45:42.997 に答える
1

Bridge + pimplパターンを使用しているので、サードパーティのライブラリを完全に非表示にすることにしました。

于 2012-02-01T13:43:47.787 に答える