<div dir="ltr"><div dir="ltr" class="gmail_msg">Hi,<div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">I've deleted the post on StackOverflow. Sorry for the ambiguity, the problem is not arg, but the Function f. </div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"></div></div><div dir="ltr" class="gmail_msg"><div class="gmail_msg"><div class="gmail_msg">#include <Rcpp.h></div><div class="gmail_msg">using namespace Rcpp;</div><div class="gmail_msg">// [[Rcpp::export]]</div></div></div><div dir="ltr" class="gmail_msg"><div class="gmail_msg"><div class="gmail_msg">RObject cppfunction(Function rfunction = NULL) {</div><div class="gmail_msg">      if( rfunction == NULL){</div><div class="gmail_msg">      cout << 1 + 1 << endl;  // if we don't pass rfunction to cppfunction, run something not related to rfunction() </div><div class="gmail_msg">      }else{</div><div class="gmail_msg">     rfunction()  // if we pass rfunction to cppfunction, run it</div><div class="gmail_msg">      }</div><div class="gmail_msg">}</div></div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">rfunction is an argument of cppfunction. Sometimes I need to pass rfunction to cppfunction sometimes not. So I need to set a default rfunction (something like NULL indicating not passing it). </div><div class="gmail_msg"><br></div><div class="gmail_msg">But </div><div class="gmail_msg">   RObject cppfunction(Function rfunction = NULL)<span class="inbox-inbox-Apple-converted-space"> </span></div><div class="gmail_msg">doesn't work. How can I make it?</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">Thanks!</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">Best,</div><div class="gmail_msg">Jingyu </div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><br class="gmail_msg"></div></div><br class="gmail_msg"><div class="gmail_quote gmail_msg"><div dir="ltr" class="gmail_msg">On Thu, Nov 10, 2016 at 11:41 PM Dirk Eddelbuettel <<a href="mailto:edd@debian.org" class="gmail_msg" target="_blank">edd@debian.org</a>> wrote:<br class="gmail_msg"></div><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br class="gmail_msg">
On 11 November 2016 at 05:16, Jingyu He wrote:<br class="gmail_msg">
| I'm writing a R package by Rcpp and I have a problem when setting default value<br class="gmail_msg">
| when call a R function in Rcpp. Here is an example to pass a R function to C++,<br class="gmail_msg">
| provided by <a href="http://adv-r.had.co.nz/Rcpp.html" rel="noreferrer" class="gmail_msg" target="_blank">http://adv-r.had.co.nz/Rcpp.html</a><br class="gmail_msg">
|<br class="gmail_msg">
| #include <Rcpp.h><br class="gmail_msg">
| using namespace Rcpp;<br class="gmail_msg">
| // [[Rcpp::export]]<br class="gmail_msg">
| RObject callWithOne(Function f) {<br class="gmail_msg">
|   return f(1);<br class="gmail_msg">
| }<br class="gmail_msg">
|<br class="gmail_msg">
| The question is, how to set the default value for f? I would like to have the<br class="gmail_msg">
| choice to pass a function or not, like<br class="gmail_msg">
|<br class="gmail_msg">
| callWithOne(Function f = NULL) {<br class="gmail_msg">
|   // if pass f, run f(1)<br class="gmail_msg">
|   // else, run something else<br class="gmail_msg">
| }<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
1) Don't crosspost. If you decided to post on StackOverflow, stay on<br class="gmail_msg">
StackOverflow. Now that you posted here, maybe delete the question on<br class="gmail_msg">
StackOverflow.<br class="gmail_msg">
<br class="gmail_msg">
2) I don't understand the question.  Wouldn't the following do:<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
#include <Rcpp.h><br class="gmail_msg">
using namespace Rcpp;<br class="gmail_msg">
// [[Rcpp::export]]<br class="gmail_msg">
RObject callWithOne(Function f) {<br class="gmail_msg">
  const int arg = 1;<br class="gmail_msg">
  return f(arg);<br class="gmail_msg">
}<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
If it is a constant, as you seem to imply, why not make it one?<br class="gmail_msg">
<br class="gmail_msg">
But if it is a variable, just pass it down.<br class="gmail_msg">
<br class="gmail_msg">
Dirk<br class="gmail_msg">
<br class="gmail_msg">
--<br class="gmail_msg">
<a href="http://dirk.eddelbuettel.com" rel="noreferrer" class="gmail_msg" target="_blank">http://dirk.eddelbuettel.com</a> | @eddelbuettel | <a href="mailto:edd@debian.org" class="gmail_msg" target="_blank">edd@debian.org</a><br class="gmail_msg">
</blockquote></div></div>