[Rd] Interfacing R and C++

Prof Brian Ripley ripley at stats.ox.ac.uk
Mon Jan 9 21:20:23 CET 2006


The wrapper function must be in extern "C" {} since you want to give it a 
C name (and not a mangled C++ one).  These days, the headers probably do 
not need to be, but in theory if they are C headers they should be in any 
C++ code.

I think R-exts is quite clear on this:

   To use with @R{}, the only thing we have to do is writing a wrapper
   function and ensuring that the function is enclosed in
                              ^^^^^^^^^^^^^^^^^^^^^^^^



On Mon, 9 Jan 2006, Sean Davis wrote:

> I have a single c++ file that contains a class and a "wrapper" function that
> has C-like syntax for interacting with the Class.  Basically, this wrapper
> function just makes an instance of the class and then organizes the data for
> return to R.
>
> #include <math.h>
>
> void myFunc(double *data, int *n, double *prm, double* intervals, int* max,
> double *plot) {
> ...
> }
>
> myClass::myclass(...) {
> ...
> }
>
> My question is simple:  what goes inside the extern "C" {} block.  Should it
> include only the #includes, those and the "wrapper" function, or the entire
> .cc file?  The answer wasn't clear to me from the Writing R extensions
> manual (probably due to my c++ ignorance--using someone else's code).
>
>> sessionInfo()
> R version 2.2.0, 2005-08-11, powerpc-apple-darwin7.9.0
>
> attached base packages:
> [1] "methods"   "stats"     "graphics"  "grDevices" "utils"     "datasets"
> [7] "base"
>
> I'm trying to use the .C interface and getting segmentation faults--probably
> a bug in the code, but just wanted to make sure that it wasn't a simple
> issue with the extern block.
>
> Thanks,
> Sean
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
>

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595



More information about the R-devel mailing list