これは前の質問へのフォローアップです。
クライアントが行列や四元数などの複雑な型を提供する必要があるライブラリを開発しています。内部的には、Eigenを使用してこれらの型を操作し、リンクされた質問の議論に基づいて、おそらく Eigen の型の周りに薄いラッパーを配置し、クライアントにそれらの型をライブラリに提供するように依頼し、本質的に Eigen を内部実装の詳細。
実際、私のクライアントの一部はすでに Eigen を使用している可能性があるため、Eigen の型のラップされたバージョンで Eigen 関数との間である種の機能を提供するよう提案されました。
それはすべて問題ないように思えますが、私のライブラリがクライアントが使用しているバージョンとは異なるバージョンの Eigen を内部で使用している場合にどうなるか心配です。2 つのバージョンが ABI 互換であれば、何の問題もありません。ただし、そうでない場合は、「悪い」ことが起こっていると想像できます。Eigen はヘッダーのみのライブラリであり、たとえば、私のライブラリとクライアントがすべて同じコンパイル済みバージョンのサードパーティ ライブラリにリンクするとは想定できないため、特に心配しています。
ユーザーにソース コードを提供し、Eigen に対してコンパイルしてもらう場合、あまり心配する必要はありません。しかし、私が最も懸念しているのは、ユーザーのために DSO/DLL をコンパイルしてインストールする場合です。
ですから、私の質問は次のとおりだと思います: クライアントが ABI 互換バージョンのライブラリを使用するように制限する必要がありますか? Eigen に必要なヘッダーを提供することはできますが、ユーザーが既に Eigen を使用していると問題が発生します。
ラッパー型への必要な変換をクライアントに任せることができると思いますが、便利な関数を提供したいと思います。
特に Eigen について話していますが、この質問は型を提供するサードパーティのライブラリにも当てはまる可能性があることに注意してください。
ありがとう!