我一直在努力编写一个实用函数来在Eigen Matrix
和STL vector
之间进行转换。我把我的代码浓缩为:
#include <Eigen/Dense>
#include <vector>
#include <iostream>
template <int Flags=Eigen::RowMajor, typename Derived>
std::vector<typename Derived::Scalar>
eigenToStdVector(const Eigen::EigenBase<Derived>& b)
{
typedef typename Derived::Scalar Scalar;
std::vector<Scalar> out(b.size());
Eigen::Map<Eigen::Matrix<Scalar, Eigen::Dynamic, Eigen::Dynamic, Flags> >
(out.data(), b.rows(), b.cols()) = b/*.derived()*/;
return out;
}
int
main ()
{
Eigen::MatrixXf v(2,4);
v << 1,2,3,4,5,6,7,8;
std::cout << v << std::endl;
for (auto i : eigenToStdVector(v))
std::cout << i << ' ';
std::cout << std::endl;
for (auto i : eigenToStdVector<Eigen::ColMajor>(v.transpose()))
std::cout << i << ' ';
std::cout << std::endl;
return 0;
}
我不明白为什么包含(注释的).derived()
行会导致编译成功。如果有人可以评论为什么包含这个是必要的,我将非常感激!
我正在使用GCC 4.8和Eigen 3.2.1。
答案 0 :(得分:1)
您应该使用DenseBase
而不是过于笼统的EigenBase
基础classe。这种差异可能会在3.3中消失。