ユーザーが行列や四元数などの複雑な入力を提供する C++ ライブラリを開発しています。これらの型を再実装する必要はないので、内部的にはEigenライブラリを使用します。
これらの型をライブラリのクライアントに公開する最善の方法を決定しようとしており、API のいくつかのオプションを考え出しました。例としてクォータニオン型を使用しますが、これは行列などにも同様に適用できます。また、私は特に Eigen の型を公開することについて話していますが、この質問は使用中の他の外部ライブラリにも同様に当てはまると思います。
1) 基本的な C++ 型のみを使用する
このオプションでは、クライアントは基本型を介してデータを渡す必要があります。たとえば、クォータニオン (4 つの要素) を渡すには、次のようにします。
void my_func(double my_quat[4])
2) 固有の型を公開する
Eigen は、配列とクォータニオンに対していくつかのテンプレート化された型を提供します。たとえば、関数が四元数を必要とする場合、Eigen のQuaterniond
型 (実際には の typedef ですQuaternion<double>
)を使用できます。
void my_func(const Eigen::Quaterniond& my_quat)
3)クライアントのさまざまなタイプの単純なラッパーを作成します
API に渡すためにクライアントが (おそらく何らかのファクトリ関数を介して) 作成する必要がある非常に単純な四元数型 (たとえば、ある種の単純な構造体) を作成できます。
void my_func(const quaternion_t& my_quat)
quaternion_t
私のライブラリは、型を内部固有表現に変換します。
オプション 1 はあまり好きではありません。なぜなら、API で入力する感覚をより強くしたいからです。オプション 2 では、私のクライアントも Eigen を使用する必要があります。別のバージョンの Eigen を使用した場合の互換性に関する潜在的な問題は言うまでもありません (ちなみに、Eigen はヘッダーのみのライブラリです)。残りはオプション 3 です。
人々はどう思いますか?基本的に自分の質問に答えましたか?例はありますか?
関連する質問
関連する質問がここで尋ねられましたが、外部型を公開する必要があるかどうかの詳細には実際には入りませんでした。