如何初始化" Eigen" - 矩阵块?

时间:2017-10-25 14:15:20

标签: c++ eigen

对不起这个主题 - 我无法创造出更好的主题......

我的意思是:我有一个2d-Vector a和一个3d-Vector b。当我初始化b时,b(0,1)应设置为a,b(2)应设置为1.此代码有效:

    const Vector2d a(1,2);
    Vector3d b( 0,0,1 );
    b.head<2>() = a;

但我宁愿拥有(其中包括const):

    const Vector2d a(1,2);
    const Vector3d b( a, 1 );

这不起作用。有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:1)

如果没有const,你会这样做:

Vector3d b;
b << a, 1;

如果你真的希望它是const,那么你可以这样做:

const Vector3d b = (Vector3d() << a, 1).finished();

答案 1 :(得分:1)

以下是使用lambda可以做的事情(假设使用构造函数调用并不是一种更简单的方法):

auto generateB = [&]() -> Vector3d {
    Vector3d b(0, 0, 1);
    b.head<2>() = a;
    return b;
  };

然后你就像这样使用它:

auto const actualB = generateB();
Vector3d const anotherB = generateB();