是否可以在头文件中初始化静态特征矩阵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。我似乎无法从那里找到如何做到这一点。
答案 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;
}();