C++ 本征初始化静态矩阵

C++ Eigen initialize static matrix

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

我想按照以下方式做一些事情:

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

或类似于向量:

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

这是本征矩阵文档的 link。我似乎无法从那里找到如何执行此操作。

您可以像这样使用初始化 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;
}();

按照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 处理临时文件,所以不用担心额外的副本。

更优雅的解决方案可能包括使用 finished()。函数 returns ' 构建矩阵,一旦其所有系数都已设置。'

例如:

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