我可以连接本征:: Vector的std :: tuple吗?

问题描述 投票:0回答:1

例如,如果我有一个std::tuple静态分配的Eigen::Vector(例如来自流行的Eigen库)

std::tuple<Eigen::Vector2f, Eigen::Vector3f, Eigen::Vector2f>

是否有办法将其转换为三个向量中的单个Eigen::Vector7f(即Eigen::Matrix<float, 7, 1>)?鉴于所有内容的大小和类型都是已知的,感觉我应该能够在编译时执行此操作。

c++ eigen stdtuple
1个回答
0
投票

您可以写:

template<int R1, int R2, int R3>
auto foo(std::tuple< 
    Eigen::Matrix<float,R1,1>, 
    Eigen::Matrix<float,R2,1>, 
    Eigen::Matrix<float,R3,1> > t)
{
    Eigen::Matrix<float,R1+R2+R3,1> res;
    res.block(0,0,R1,1) = std::get<0>(t);
    res.block(R1,0,R2,1) = std::get<1>(t);
    res.block(R1+R2,0,R3,1) = std::get<2>(t);
    return res;
}

int main() {
    Eigen::Vector2f v1;
    v1 << 1,2;
    Eigen::Vector3f v2;
    v2 << 3,4,5;
    std::cout << foo(std::make_tuple(v1,v2,v1)) << std::endl;

作为输出:

1,2,3,4,5,1,2

Live demo

© www.soinside.com 2019 - 2024. All rights reserved.