[Rcpp-devel] Simplest Class Example For Starters

ivo welch ivo.welch at anderson.ucla.edu
Thu May 30 18:23:18 CEST 2013

dear readers:  I am trying to learn how to interface a simple C++ class
into the underbelly of R.   I read the introduction and faq vignettes and
hadley's tutorial.   alas, I am mixing and matching badly.  I also don't
have the full template programming background, which dates me, and the
examples are quickly going down roads that are not illustrative of where I
want to go.

I would like to get a deliberately simple working example of a plain C++
class.  if no good example exists, here is one I made up that should be
fairly canonical.  the R code should be something like

test <- function() {
  silly.object <- Silly(100)  ## initializer
  silly.object <- update( silly.object, 10 )  ## updater
  show( silly.object )  ## results
  silly.object <- update( silly.object, 20 )
  show( silly.object )
  ## don't leak but call destroy on the silly example

the C++ code in silly.cpp should wrap/glue the following:

struct Silly {
    double *v; int k;  // shows internal memory allocation
    Silly(int i) { k=i; v=new double[k]; }
    ~Silly() { delete [] v; }
    void update( double x1 ) { for (int i=0; i<k; ++i) v[i]= v[i]+x1*i; }
    int show() { for (int i=0; i<k; ++i) printf("i[%d]=%lf\n", i, v[i]);
return k; }

that's it.  here, I know all the types.  I think I don't need SEXPs (or
maybe I do?), because I know I want to deal with numerics.  silly.object is
my class object (or pointer to one Silly struct) that I want to carry along
in R, but not have R know more about.  the argument to update() is known to
be a double (or we could make it a NumericVector) for simplicity sake.

if this sort of example is easier done with C and structs instead of C++
and classes, I would be ok with this, too.  If the example were embedded in
a cppFunction() call, even better.  I prefer as little ceremony (glue) as

could someone please point me to a standalone example that is similar?
 once I have this, experimenting should become a whole lot easier.  (PS:
This might make a nice opening of a tutorial, or a nice piece for the R

advice appreciated.

Ivo Welch (ivo.welch at gmail.com)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20130530/0e516067/attachment.html>

More information about the Rcpp-devel mailing list