Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Since last CRAN release of Rcpp11
, I’ve started to work on the next iteration of R/C++ support with Rcpp14
by propagating changes to both implementations, e.g. the Strict
class that I mentionned in this post.
But now, I’m starting to make unique changes to Rcpp14
for things that require C++14
, which is the whole point. These should have no effect for typical uses, but will definitely make the code base more manageable.
One such feature is the auto
deduction of function return types in C++14
. C++11
does not have that feature so we ended up manually declaring the return type in many places. Here is for example how ifelse
is implemented in Rcpp11
:
template <typename Cond, typename Expr1, typename Expr2> inline auto ifelse( const Cond& cond, const Expr1& expr1, const Expr2& expr2 ) -> decltype(mapply( sugar::ifelse_op(), cond, expr1, expr2)) { return mapply( sugar::ifelse_op(), cond, expr1, expr2) ; }
The return type is easier to declare using the auto ... -> decltype(...)
construct already, but auto
return type deduction in C++14
goes further and lets us implement ifelse
like this:
template <typename Cond, typename Expr1, typename Expr2> inline auto ifelse( const Cond& cond, const Expr1& expr1, const Expr2& expr2 ) { return mapply( sugar::ifelse_op(), cond, expr1, expr2) ; }
This is minor, and again with no consequence to the end user, but things like this will make Rcpp14
even nicer to develop than Rcpp11
.
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.