Vraag Fout bij het mixen van typen met Eigen-matrices


Er was geen snel antwoord om dit probleem op te lossen, dus ik dacht dat ik er een zou toevoegen.

Stel dat ik de volgende voorbeeldcode heb van de c ++ Eigen Library:

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

Ik krijg een compileerfout op de laatste regel die hier op neer komt:

YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY

Wat is een eenvoudige manier om dit op te lossen?


13
2018-05-30 03:41


oorsprong


antwoorden:


Dus de manier om dit op te lossen, wat me een vervelende lange tijd kostte om te vinden, is om het afgeleide te gebruiken cast methode beschreven hier. Nu is de definitie dit:

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

Welke Ill toegeeft, heeft me een beetje gefaseerd. Maar blijkt dat het vrij eenvoudig is (en de enige verklaring die ik kon vinden was in de Eigen 2.0 doc die frustrerend was). Het enige wat u hoeft te doen is dit:

m2 = m1.cast<float>();

Probleem opgelost.


22
2018-05-30 03:41