Hi, 

I guess RCPP_RETURN_VECTOR could be easily extended to support variadic number 
of arguments, using either variadic templates or variadic macros. 
https://github.com/RcppCore/Rcpp/blob/3ef9e662d89ebcfe71734675071568302bf10104/inst/include/Rcpp/macros/dispatch.h#L44

RCPP_RETURN_VECTOR is not that used as it looks kind of ugly and forces on you 
dispatch on all the SEXP types and sometimes you just want say INTSXP and 
REALSXP ...

Romain

Le 20 août 2014 à 14:30, Sven E. Templer <sven.temp...@gmail.com> a écrit :

> 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

_______________________________________________
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

Reply via email to