Hi Daniel,

Unfortunately, you cannot use // [[Rcpp::export]] to automagically export
template functions.

The general alternative approach is to define a template implementation,
and then dynamically dispatch to that implementation, e.g.

   template <typename T>
   void doStuffImpl() { ... }

with dispatch as

   // [[Rcpp::export]]
   void doStuff(SEXP object) {
       switch (TYPEOF(object)) {
       case INTSXP: return doStuffImpl<IntegerVector>();
       case REALSXP: return doStuffImpl<NumericVector>();
       ...
       }
   }

Of course, the way you implement your dispatch could differ, but generally
you need to manually map the opaque SEXP type to the appropriate Rcpp type
(or otherwise)

Hope this helps,
Kevin

On Friday, May 1, 2015, daniel castro <danielcast...@gmail.com> wrote:
> Hello,
>
> I'm trying to build a function that calculates (for example) the log
> of all elements of a container. I want this container to be a vector,
> a Rcpp::numericVector , or perhaps a arama::colvec , so I'm trying
> with templates ,and it compiles without the // [[Rcpp::export]] part,
> but when I put it to export to R it doesn't work:
>
> //declaration
> template<class T>
> T Vlog(T vectorForm);
>
> //code
> // [[Rcpp::depends(RcppArmadillo)]]
> // [[Rcpp::export]]
> template<class T>
> T Vlog(T vectorForm)
> {
>
>
>    std::transform(vectorForm.begin(), vectorForm.end(),
> vectorForm.begin(), log);
>    return vectorForm;
> }
>
>
> gives 'T' was not declared in this scope.
>
> if possible, How could I fix it?
>
> Thank you in advance
> Daniel,
> _______________________________________________
> 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