Ich mag würde eine Eigen coeffientwise Bediener haben, wo der Rückgabetyp von dem Eingangsmatrixtyp unterscheidet, z.B.Eigen Koeffizient wise Bediener mit verschiedenem Rückgabetyp
struct TimesPi {
double operator()(int v) { return 3.14 * v; }
};
// in main
Eigen::Vector3i vec_ints(1, 2, 3);
Eigen::Vector3d vec_dbls = vec_ints.unaryExpr<TimesPi>();
Dies führt zu einer Fehlermeldung Compiler error: static assertion failed: YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY
.
Wie kann ich eine elementweise Operation erzeugen, die einen anderen Typ zurückgibt?
edit: Für den speziellen Fall habe ich (anders als Beispiel), kann ich nicht anwenden (z. B. mit einem benutzerdefinierten Skalar-Typ). Ich denke, unaryExpr könnte hier falsch eingesetzt werden. Vielleicht etwas mit CwiseUnaryOp?
könnte eine angemessenere Beispiel
seinstruct SomeOperation {
double operator()(const Foo& v) { return v.attribute; }
};
// in main
Eigen::Matrix<Foo, 3, 1> vec_foos;
Eigen::Matrix<double, 3, 1> = vec_foos.unaryExpr<SomeOperation>();
I haven‘ t verwendet Eigen, aber ich kann anhand der Fehlermeldung erraten, dass es so etwas wie 'vec_ints.cast() .unaryExpr ()' ist. –
chris
Für den speziellen Fall, den ich habe (anders als Beispiel), kann ich keine Besetzung verwenden. Ich denke, "unaryExpr" könnte hier falsch sein. Vielleicht etwas mit 'CwiseUnaryOp'? – Jeff
Das sieht wie eine Expression-Template-Klasse aus, die nicht explizit verwendet werden sollte. Auf der entsprechenden Seite sehe ich auch, dass 'x * vec' direkt erlaubt sein sollte. – chris