GMP番号ライブラリをEigen行列ライブラリと一緒に使用しようとしています。テンプレートをインスタンス化しようとしています:
Matrix<typename Scalar, int RowsAtCompileTime, int ColsAtCompileTime>
と
Matrix<mpz_class, 3, 3> matrix;
ここで、mpz_classはGMPライブラリの数値クラスです。
コンパイラエラーが発生します:
/usr/include/eigen3/Eigen/src/Core/MathFunctions.h:409: error:
invalid static_cast from
type ‘const __gmp_expr<__mpz_struct [1], __mpz_struct [1]>’
to type ‘int’
Eigenライブラリのソースコードを調べると、問題は、このテンプレートでmpz_classをintにstatic_cast-edできないことであることがわかりました。
template<typename OldType, typename NewType>
struct cast_impl
{
static inline NewType run(const OldType& x)
{
return static_cast<NewType>(x);
}
};
この問題を回避するにはどうすればよいですか?実行時にmpz_classをintに変換する方法は知っていますが、static_castはコンパイル時であるため、コンパイラーが実行する必要があります。