[Rcpp-devel] RcppEigen questions

Hao Xiong hao at biostat.ucsf.edu
Sat Nov 19 01:15:43 CET 2011


I have a few questions about RcppEigen. I hope I am posting on the right 

1. const-correctness

Suppose I have a function

double fcn(NumericVector const& points){
Map<VectorXd > tmp = as<Map<VectorXd > >(points);

It compiles fine.

Changing the mapping line to
Map<VectorXd const > tmp = as<Map<VectorXd const> >(points);
and it fails to compile.

Eigen is rather strict about const-correctness.
Map<VectorXd > tmp{const_pointer, 5};
would fail because the pointer is pointing to read-only memory. I am rather
confused as which way should be preferred.

Also the method begin() returns non-const pointer regardless whether the 
was declared const.

2. Still the same setup as above,

Map<ArrayXd > tmp = as<Map<ArrayXd > >(points);
fails to compile. Add const still results in failure. Is there anything 
special about mapping arrays that
I am not aware of?

3. I used to do the above in the following way

Map<ArrayXd> tmp{points.begin(), points.size()};

I think this is fine for dense matrix and array, but I am not entirely sure.
I would welcome any suggestion as to the pros and cons of this vs as<>().

Thanks for your help.

More information about the Rcpp-devel mailing list