Я пытаюсь использовать библиотеку чисел 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 нельзя преобразовать static_cast в 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 — это время компиляции.