[Rcpp-devel] Deriving type information
Søren Højsgaard
sorenh at math.aau.dk
Fri Feb 14 00:34:42 CET 2014
Dear all,
Function foo_num below takes a numeric vector and returns a list with the first element of the vector. (Not very interesting function). I want to create a templated version of this in function do_foo below, but whether "a" should be a double, an integer, or a string depends on the RTYPE.
My question is (and it is embarrasing to ask because I believe Romain has already answered it; just can't find the answer) how to derive the what type "a" should have once we know RTYPE??
My second question is: Isn't there an easier general way to write the dispatch function (I have in mind situations where the templated function takes *more* than one argument!)? I have in mind something like:
int type = TYPEOF(XX_) ;
return do_foo<type> ( XX_ ) ;
but that fails because INTSXP, REALSXP etc seems to be defined as const's (thats my reading of the compiler message).
Thanks
Søren
#include <Rcpp.h>
using namespace Rcpp;
//[[Rcpp::export]]
List foo_num(NumericVector x){
double a=x[0];
return List::create( a );
}
template <int RTYPE>
List do_foo( Vector<RTYPE> x ){
double a=x[0]; // WHAT TO DO HERE???
return List::create( a );
}
SEXP foo_any( SEXP& XX_){
int type = TYPEOF(XX_) ;
switch( type ){
case INTSXP : return do_foo<INTSXP> ( XX_ ) ;
case REALSXP : return do_foo<REALSXP>( XX_ ) ;
case STRSXP : return do_foo<STRSXP> ( XX_ ) ;
}
return R_NilValue ;
}
More information about the Rcpp-devel
mailing list