Hello, I think I (superficially) understand the difference between:
// [[Rcpp::export]] double sum1(Rcpp::NumericMatrix M) { arma::mat A(M.begin(), M.rows(), M.cols(), false); return sum(sum(A)); } // [[Rcpp::export]] double sum2(arma::mat A) { return sum(sum(A)); } Partly out of laziness, partly because sum2 is more elegant, and partly to avoid namespace pollution, I was wondering if there is a way to "force" a "shallow" copy in sum2. If not, then may I submit a low priority feature request. An attribute? Some thing like: // [[Rcpp::export]] double sum2(arma::mat A) { // [[ Rcpp::shallow ( A ) ]] return sum(sum(A)); } Or (akin to C++11 generalized attributes) // [[Rcpp::export]] { [[ Rcpp::shallow ( A ) ]] } double sum2(arma::mat A) { return sum(sum(A)); } An alternative is to have an argument in sourceCpp that takes a list/vector of objects that are to be shallow or deep copied. For example in sum1, if M is changed within the function before casting to the arma::mat, then might be cleaner to add M to a list/vector of objects to be deep copied rather than cloning M within sum1: leads to one fewer variable name. Just a thought. I can certainly live with the additional step. As always, thanks for all the Rcpp goodness. Cheers, Changi Han
_______________________________________________ Rcpp-devel mailing list Rcpp-devel@lists.r-forge.r-project.org https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel