如何使用Eigen的unaryExpr和自定义标量类型?

时间:2015-02-18 14:40:04

标签: c++ linear-algebra eigen

我有以下代码:

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))));

1 个答案:

答案 0 :(得分:0)

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

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