[Rcpp-devel] Simplest Class Example For Starters

ivo welch ivo.welch at gmail.com
Thu May 30 18:42:32 CEST 2013

dear readers:  I am trying to learn how to interface a simple C++ class
into the underbelly of R.   I don't plan to use this regularly---just for
one or two applications.  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)

Ivo Welch (ivo.welch at gmail.com)
J. Fred Weston Professor of Finance
Anderson School at UCLA, C519
Director, UCLA Anderson Fink Center for Finance and Investments
Free Finance Textbook, http://book.ivo-welch.info/
Editor, Critical Finance Review, http://www.critical-finance-review.org/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20130530/d024245a/attachment-0001.html>

More information about the Rcpp-devel mailing list