[Rcpp-devel] ListOf -- update

Romain Francois romain at r-enthusiasts.com
Tue Oct 29 08:29:19 CET 2013


Hi,

I'll review this when I get a chance. If we include this in Rcpp, it 
will have to be split into at least two files. Everything that uses wrap 
or as has to go in meat.

Romain

Le 29/10/2013 05:02, Kevin Ushey a écrit :
> Hi guys,
>
> With some encouragement from Romain, I took a shot at implementing the
> ListOf<T> class. For now, everything's just in one big .cpp file here
> (later I can factor it out to .h and .cpp files). But please take a
> look here:
>
> https://gist.github.com/kevinushey/7208681
>
> I took Romain's suggestions from before and 1) have ListOf<T>
> inheriting from List directly, and 2) proxified operator[] so we can
> distinguish read / write (merci, Scott Meyers, for More Effective
> C++). Ultimately, most of it is boilerplate used so that the proxy is
> handled correctly.
>
> The class isn't too complicated, but it is surprisingly functional
> since it can leverage everything already available in Rcpp. It works
> well with the sugar functions and it can be handled by Rcpp attributes
> as-is as well. There are a couple of demonstrative examples at the
> bottom (to be written as a more formal test suite later).
>
> I would welcome any comments; I'm fairly inexperienced as a C++
> programmer so I'm sure some things might be wrong.

You're on the right track.

> Things I know could be better and would appreciate some advice on:
>
> 1) Use Rcpp's traits system rather than TYPEOF for mapping template
> types to strings (ie. in validate), (eg: going from Rcpp classes to
> internal SEXP types; more generally, how can I navigate the traits
> namespace),
>
> 2) Extend lapply, sapply to infer types for applied templated
> functions from ListOf<T> classes, so for e.g. a ListOf<NumericVector>
> x and a template function add_1, we could just write
>
>      lapply(x, add_1);
>
> rather than
>
>      lapply(x, add_1<NumericVector>);
>
> Thanks!
>
> -Kevin


-- 
Romain Francois
Professional R Enthusiast
+33(0) 6 28 91 30 30



More information about the Rcpp-devel mailing list