美文网首页
使用Union将Eigen的Vector和原始Struct绑定到

使用Union将Eigen的Vector和原始Struct绑定到

作者: VellBibi | 来源:发表于2022-03-22 11:40 被阅读0次

需求

项目中用到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;
}

此方法试用于所有内存顺序固定的数据结构的绑定

相关文章

网友评论

      本文标题:使用Union将Eigen的Vector和原始Struct绑定到

      本文链接:https://www.haomeiwen.com/subject/zqlfjrtx.html