从Eigen :: Translation构造Eigen :: Transform

时间:2014-06-16 14:17:14

标签: c++ eigen3

我有以下代码:

void mySetTransform(const Eigen::Affine3d& T);
...
mySetTransform(Eigen::Translation3d(1.0,2.0,3.0));

这不能编译,它无法将Eigen::Translation3d转换为Eigen::Affine3d。以下行导致相同的错误:

Eigen::Affine3d test = Eigen::Translation3d(r);

但这很好:

Eigen::Affine3d test;
test = Eigen::Translation3d(r);

因此,看起来=运算符工作正常,但未定义构建Eigen::Affine3d Eigen::Translation3d的构造函数。

Translation类的文档跟有note

  

此课程的目的不是用于存储翻译   改造,而是使建筑和更容易   转换对象的更新。

有没有办法声明上面的函数,以便可以使用任何变换对象直接调用它,比如在Eigen / Geomerty中声明的Translation(不使用临时变量)?

1 个答案:

答案 0 :(得分:3)

这是因为Translation from a Translation的构造函数是显式的。所以你必须明确地称它为:

Translation3d t(1.0,2.0,3.0);
mySetTransform(Affine3f(t));

让我们考虑以下两个例子:

Affine3d test1(t);  // OK
Affine3d test2 = t; // NOT OK

即使在两种情况下都是被调用的构造函数(不是operator =),只有第一个对于显式构造函数是可以的。这是一个标准的C ++规则。当然你也可以这样做:

Affine3d test3 = Affine3d(t); // OK