user3294195
user3294195

Reputation: 1828

Eigen - Map a const array to a dynamic vector

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.

Upvotes: 8

Views: 5876

Answers (1)

Avi Ginsburg
Avi Ginsburg

Reputation: 10596

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.

Upvotes: 13

Related Questions