如何将 Eigen 的 unaryExpr 与自定义标量类型一起使用?

How to use Eigen's unaryExpr with custom scalar type?

我有以下代码:

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: error: no matching function for call to ‘log(Eigen::internal::significant_decimals_default_impl, false>::RealScalar)’ return cast(ceil(-log(NumTraits::epsilon())/log(RealScalar(10))));

unaryExpr 工作正常(尽管使用 const Vector3f & element 作为参数会更简单)。

不起作用的是 cout << b << endl;,因为 Eigen 试图在 Vector3f 上调用 logceil 来格式化输出。