[Rcpp-devel] Using lbfgsb with a Rcpp::List.

Darren Cook darren at dcook.org
Mon Nov 21 01:27:32 CET 2011

> example from help(optim), but was wondering if anyone could help me
> passing an Rcpp::List to the minimisation function....
> I don't know how to get around the void type of the function input,

double fr(int n, double *par, void *ex) {
	double x1 = par[0];
	double x2 = par[1];
//	double blah = Rcpp::as<double>(ex["numbers"]);

void* means a pointer to anything. So if you know it is an Rcpp::List*,
you'd do:
   Rcpp::List *p=static_cast<Rcpp::List>(ex);
   double blah = Rcpp::as<double>(*p["numbers"]);

Note the *p to dereference the pointer. This version might also work and
be more readable:
   Rcpp::List &TheList=*(static_cast<Rcpp::List>(ex));
   double blah = Rcpp::as<double>(TheList["numbers"]);

Both of them untested.

As Dirk is saying, using void* is C-style code. C++ style would use
templates and functors to be both safer and slightly quicker.


Darren Cook, Software Researcher/Developer

http://dcook.org/work/ (About me and my work)
http://dcook.org/blogs.html (My blogs and articles)

More information about the Rcpp-devel mailing list