To create a templated function one can use the macro RCPP_RETURN_VECTOR, e.g:
sourceCpp(code=' #include <Rcpp.h> template <typename T> T index_template ( T X ) { Rcpp::IntegerVector I(1, 0); return X[I]; } // [[Rcpp::export]] SEXP index ( SEXP X ) { RCPP_RETURN_VECTOR(index_template, X); } ') index(letters) index(c(pi,2,1)) Using a templated and a non-templated argument does not(?) allow use of the macro, e.g.: sourceCpp(code=' #include <Rcpp.h> template <typename T> T index2_template ( T X, Rcpp::IntegerVector & I ) { return X[I]; } // [[Rcpp::export]] SEXP index2 ( SEXP X, Rcpp::IntegerVector & I ) { switch(TYPEOF(X)) { case STRSXP: return index2_template(Rcpp::Vector<STRSXP>(X), I); break; case REALSXP: return index2_template(Rcpp::Vector<REALSXP>(X), I); break; case INTSXP: return index2_template(Rcpp::Vector<INTSXP>(X), I); break; default: Rf_error("Unsupported type."); } } ') index2(c(pi,2,1),2) index2(letters,2) Is there an easier way that I am missing, than to use switch/TYPEOF ...? Like RCPP_RETURN_VECTOR2(index_template, X, I). Thank you for any hint, Sven. _______________________________________________ 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