例如,如果我有一个std::tuple
静态分配的Eigen::Vector
(例如来自流行的Eigen库)
std::tuple<Eigen::Vector2f, Eigen::Vector3f, Eigen::Vector2f>
是否有办法将其转换为三个向量中的单个Eigen::Vector7f
(即Eigen::Matrix<float, 7, 1>
)?鉴于所有内容的大小和类型都是已知的,感觉我应该能够在编译时执行此操作。
您可以写:
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