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();
是否可以在头文件中初始化静态特征矩阵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();