gpt4 book ai didi

c++ - Eigen : THE_EVAL_EVALTO_FUNCTION_SHOULD_NEVER_BE_CALLED_FOR_DENSE_OBJECTS 编译时错误

转载 作者:行者123 更新时间:2023-11-28 06:53:01 32 4
gpt4 key购买 nike

我一直在努力编写一个实用函数来在 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。

最佳答案

您应该使用 DenseBase 而不是过于笼统的 EigenBase 基类。这种差异可能会在 3.3 中消失。

关于c++ - Eigen : THE_EVAL_EVALTO_FUNCTION_SHOULD_NEVER_BE_CALLED_FOR_DENSE_OBJECTS 编译时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23544049/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com