需求
项目中用到Eigen库,但同时又定义了一套原始的数据结构,两者需要互相转换,则需要进行内存copy,如下:
for (auto p: points) {
Eigen::Vector2d pp(p.x, p.y);
vPts.emplace_back(pp);
}
那么有没有一种方式转换时不需要进行内存copy呢?那就是再定义一个Union,将两者并联起来,因为Eigen数据结构中也是顺序排列的数据,所以按照Eigen的数据结构来定义出原始的struct即可,如下:
#include <Eigen/Core>
#include <iostream>
typedef struct {
double x;
double y;
} Point;
typedef union PointUnion {
Eigen::Vector2d eigen_p;
Point p{};
PointUnion() {}
} PointUnion;
int main() {
PointUnion pu;
pu.eigen_p << 1, 2;
std::cout << pu.p.x << " " << pu.p.y << std::endl;
return 0;
}
此方法试用于所有内存顺序固定的数据结构的绑定
网友评论