明智操作者我想有一个本征coeffientwise操作者在返回类型从输入矩阵类型不同,例如,本征系数具有不同的返回类型
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>();
这将导致一个编译器错误消息error: static assertion failed: YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY
。
如何生成返回不同类型的元素操作?
编辑:对于具体情况我有(不同于示例),我不能使用强制转换(例如,与自定义标量类型)。我认为unaryExpr在这里使用可能是错误的。也许与CwiseUnaryOp?
一个更合适的例子可能是
struct 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>();
我的天堂” t使用了Eigen,但是我可以从错误消息中猜出它就像'vec_ints.cast().unaryExpr ()'。 –
chris
对于具体情况我有(不同于示例),我不能使用强制转换。我认为'unaryExpr'可能是在这里使用的错误的东西。也许有'CwiseUnaryOp'的东西? – Jeff
这看起来像表达式模板类,不应该需要明确使用。在它的页面上,我也看到它看起来应该直接允许'x * vec'。 – chris