Ошибка смешивания типов с собственными матрицами

Не было быстрого ответа на поиск, который я мог видеть в стеке для этой проблемы, поэтому я решил добавить его.

Скажем, у меня есть следующий пример кода из c++ Eigen Library:

Eigen::Matrix4d m1;
Eigen::Matrix4f m2;
m1 << 1, 2, 3, 4 ... 16
m2 = m1; //Compile error here.

Я получаю ошибку компиляции в последней строке, которая сводится к следующему:

YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY

Что такое простой способ исправить это?

Ответ 1

Таким образом, способ исправить это, из-за которого мне досадно было долгое время находить, заключается в использовании метода производного cast описанного здесь. Теперь это определение:

internal::cast_return_type<Derived,const CwiseUnaryOp<internal::scalar_cast_op<typenameinternal::traits<Derived>::Scalar, NewType>, const Derived> >::type cast() const

Который я допускаю, поэтапный меня немного. Но получается, что это довольно легко (и единственное объяснение, которое я мог найти, было в документе Eigen 2.0, который был расстраивающим). Все, что вам нужно сделать, это следующее:

m2 = m1.cast<float>();

Задача решена.