On Tue, Oct 4, 2011 at 11:14 PM, Dirk Eddelbuettel <e...@debian.org> wrote: > > On 4 October 2011 at 19:53, Richard Downe wrote: > | Since I'm a bit of a glutton for punishment, and I would like to see > | this feature...are there major technical hurdles as to why this has not > | been implemented (e.g., I should just give up and find another way), or > | is it more just a "nobody's gotten around to it because it's good enough > | how it is", where I might be able to change the situation? > > "Health warning: Template meta-programming may make your head explode." > > It is mostly "just really hard". Try to find the old posts by Romain and go > from there. > > We all would like the feature, but it takes some determination so make it > happen. So far Romain has pretty much pushed the Rcpp modules implementation > all by himself.
Essentially this is why I decided to skip using Rcpp modules in the lme4Eigen package and roll my own interface from R reference classes to C++ classes using external pointers explicitly. I couldn't work out how to avoid defining explicit methods for every C++ class even if there is already such a method defined for the parent class. See the files lme4Eigen/R/AllClass.R and lme4Eigen/src/external.cpp to see a version using explicit external pointers (the lme4Eigen package is only available from http://R-forge.R-project.org/web/packages/lme4 - it is not yet on CRAN). Another subtle issue arises when using Rcpp modules, which is the ability to save an object to a file and then load it in another session. Essentially you can't. The object depends on external pointers for its functionality and the external pointers are not saved. When you load or attach such a saved object (as in save(foo, file="foo.rda"); rm(foo); load("foo.rda")) it is, in Ron Zeigler's famous words, "no longer operative". To overcome this I create explicit and implicit versions of the information needed to reconstruct the C++ object. So an lmResp reference class has numeric fields "Y", "Offset", "Weights" and "Ptr" plus activeBindingFunction fields "y", "offset", "weigths" and "ptr". All methods are defined using "ptr" which returns Ptr if it is not null and reconstructs it then returns the new value if it is a null pointer. (Don't confuse a null external pointer with the R object NULL. The null external pointer is an external pointer object which points to the memory address 0.) > > Dirk > > -- > New Rcpp master class for R and C++ integration is scheduled for > San Francisco (Oct 8), more details / reg.info available at > http://www.revolutionanalytics.com/products/training/public/rcpp-master-class.php > _______________________________________________ > 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 > _______________________________________________ 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