C ++ Eigen初始化静态矩阵

时间:2015-07-21 20:52:39

标签: c++ eigen

是否可以在头文件中初始化静态特征矩阵4d?我想将它用作全局变量。

我想按照以下方式做点什么:

static Eigen::Matrix4d foo = Eigen::Matrix4d(1, 2 ... 16);

或类似于vector:

static Eigen::Matrix4d foo = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; 

这是特征矩阵docs的link。我似乎无法从那里找到如何做到这一点。

3 个答案:

答案 0 :(得分:15)

更优雅的解决方案可能包括使用finished()。一旦设置了所有系数,该函数就会返回' 构建的矩阵。'

E.g:

static Eigen::Matrix4d foo = (Eigen::Matrix4d() << 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16).finished();

答案 1 :(得分:9)

根据Dawid的答案(有一个小问题,请参阅评论),你可以这样做:

static Eigen::Matrix4d foo = [] {
    Eigen::Matrix4d tmp;
    tmp << 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16;
    return tmp;
}();

Return value optimization负责临时工作,所以不用担心额外的副本。

答案 2 :(得分:3)

您可以像这样使用初始化lambda:

static Eigen::Matrix4d foo = [] { 
  Eigen::Matrix4d matrix;
  matrix << 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16;
  return matrix;
}();