美文网首页
使用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