私はかなりの量の科学的プログラミングを行っており、Boost.Unitsの両方で非常に良い経験をしました。これは、数量のコンパイル時の次元分析を提供します(つまり、数量に単位をタグ付けして、従来の物理的次元分析で多くのエラーをキャッチします)。線形代数の場合は2。
ただし、Eigenには単位の概念がなく、Eigenの行列にスカラー量を設定できますが、2つの量を乗算すると同じ型が生成されると予想されますが、これは明らかに単位には当てはまりません。たとえば、次のようなコードを使用します。
using boost::units::quantity;
namespace si = boost::units::si;
Eigen::Matrix< quantity< si::length >, 2, 1 > meter_vector;
quantity< si::area > norm = meter_vector.squaredNorm();
論理的には正しいのに、機能しません。
ユニットをサポートするマトリックスライブラリはありますか?これは、過去には実装が困難であったことで有名であり、C ++ 11をdecltype
使用するとはるかに簡単になりますが、C++03とテンプレートの特殊化で確実に可能になりました。