Eigen - Map a const array to a dynamic vector
Asked Answered
Z

1

8

I need to define a function that takes a const C array and maps it into an Eigen map. The following code gives me an error:

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

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

If I remove const from the function definition the code works fine. But is it possible to retain the const without any errors?

Thanks.

Zoochore answered 6/11, 2016 at 8:54 Comment(0)
W
13

If the Map's parameter is a non-const type (e.Eigen::VectorXd) then it assumes that it can modify the raw buffer (in your case *data). As the function expects a const qualified buffer, you have to tell the map that it's const. Define your typedef as

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

and it should work.

Walrath answered 6/11, 2016 at 12:52 Comment(2)
does it mean that the MapVec is a const and cannot be changed later?Haemostasis
@Haemostasis The original data cannot be changed as it's const, as in OP. The address of the data to which the Map points cannot be changed either, except with placement new, although that has nothing to do with OP.Walrath

© 2022 - 2024 — McMap. All rights reserved.