【问题标题】:Eigen - Map a const array to a dynamic vectorEigen - 将 const 数组映射到动态向量
【发布时间】:2017-03-19 18:08:48
【问题描述】:

我需要定义一个函数,该函数接受 const C 数组并将其映射到 Eigen 映射。以下代码给了我一个错误:

double data[10] = {0.0};
typedef Eigen::Map<Eigen::VectorXd> MapVec;

MapVec fun(const double* data) {
  MapVec vec(data, n);
  return vec;
}

如果我从函数定义中删除const,则代码可以正常工作。但是是否可以保留const 而不会出现任何错误?

谢谢。

【问题讨论】:

    标签: c++ arrays eigen


    【解决方案1】:

    如果Map 的参数不是const 类型(例如Eigen::VectorXd),那么它假定它可以修改原始缓冲区(在您的情况下为*data)。由于该函数需要一个const 限定缓冲区,因此您必须告诉映射它是const。将您的typedef 定义为

    typedef Eigen::Map<const Eigen::VectorXd> MapVec;
    

    它应该可以工作。

    【讨论】:

    • 是不是意味着MapVec是一个const,以后不能改?
    • @X.Arthur 原始数据无法更改,因为它是const,就像在 OP 中一样。 Map指向的数据的地址也不能改变,除了placement new,虽然这与OP无关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    • 2013-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多