我正在尝试将 GMP 编号库与特征矩阵库一起使用。我尝试实例化模板:
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 在这个模板中不能被 static_cast -ed 到 int :
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 是编译时。