我有以下代码:
Matrix<Vector3f, 3, 3> m;
m(0,0) = Vector3f(0,0,0);
m(1,0) = Vector3f(1,1,1);
m(2,0) = Vector3f(2,2,2);
m(0,1) = Vector3f(3,3,3);
m(1,1) = Vector3f(4,4,4);
m(2,1) = Vector3f(5,5,5);
m(0,2) = Vector3f(6,6,6);
m(1,2) = Vector3f(7,7,7);
m(2,2) = Vector3f(8,8,8);
auto lambda = [&](const Ref<const Vector3f> & element)->Vector3f{ return element * -1;};
auto b = m.unaryExpr(lambda);
cout << b << endl;
但是这段代码不会编译。所以我想知道是否可以使用带有自定义标量类型的unaryExpr?如果是的话,有一个例子吗?
编译错误:
/path/Eigen/src/Core/IO.h:132:95:错误:没有匹配的呼叫功能 至 'log(Eigen :: internal :: significant_decimals_default_impl,false&gt; :: RealScalar)' return cast(ceil(-log(NumTraits :: epsilon())/ log(RealScalar(10))));
答案 0 :(得分:0)
unaryExpr
工作正常(尽管使用const Vector3f & element
作为参数会更简单。)
不起作用的是cout << b << endl;
,因为Eigen尝试在log
上调用ceil
和Vector3f
来格式化输出。