<div dir="ltr">Hi, Jingyu,<div><br></div><div>I post a small example below. I think this is what you want.</div><div><br></div><div>Best,</div><div><br></div><div>KK</div><div><br></div><div><div>#include <Rcpp.h></div><div><br></div><div>using namespace Rcpp;</div><div><br></div><div>//[[Rcpp::export]]</div><div>void test(Nullable<Function> f = R_NilValue) {</div><div>  if (f.isNotNull()) {</div><div>    Rcpp::Rcout << "Not NULL fun" << std::endl;</div><div>    Function f2(f);</div><div>    f2();</div><div>  } else {</div><div>    Rcout << "NULL fun" << std::endl;</div><div>  }</div><div>}</div><div><br></div><div>/* R code</div><div>> Rcpp::sourceCpp("test.cpp")</div><div>> f_test <- function() {</div><div>+ print("test fun")</div><div>+ }</div><div>> test(f_test)</div><div>Not NULL fun</div><div>[1] "test fun"</div><div>> test()</div><div>NULL fun</div><div>*/</div></div><div><br></div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Nov 11, 2016 at 7:18 AM, Dirk Eddelbuettel <span dir="ltr"><<a href="mailto:edd@debian.org" target="_blank">edd@debian.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=""><br>
On 11 November 2016 at 05:53, Jingyu He wrote:<br>
| I've deleted the post on StackOverflow. Sorry for the ambiguity, the problem is<br>
| not arg, but the Function f. <br>
|<br>
|<br>
| #include <Rcpp.h><br>
| using namespace Rcpp;<br>
| // [[Rcpp::export]]<br>
| RObject cppfunction(Function rfunction = NULL) {<br>
|       if( rfunction == NULL){<br>
|       cout << 1 + 1 << endl;  // if we don't pass rfunction to cppfunction, run<br>
| something not related to rfunction() <br>
|       }else{<br>
|      rfunction()  // if we pass rfunction to cppfunction, run it<br>
|       }<br>
| }<br>
|<br>
| rfunction is an argument of cppfunction. Sometimes I need to pass rfunction to<br>
| cppfunction sometimes not. So I need to set a default rfunction (something like<br>
| NULL indicating not passing it). <br>
|<br>
| But <br>
|    RObject cppfunction(Function rfunction = NULL) <br>
| doesn't work. How can I make it?<br>
<br>
</span>Well that is a different question :) But it has a nice answer: use<br>
<br>
   Rcpp::Nullable<Rcpp::Function> rfunction<br>
<br>
and test via<br>
<br>
   if (rfunction.isNull())<br>
<br>
(Untested, but should work)<br>
<span class="im HOEnZb"><br>
Dirk<br>
<br>
--<br>
<a href="http://dirk.eddelbuettel.com" rel="noreferrer" target="_blank">http://dirk.eddelbuettel.com</a> | @eddelbuettel | <a href="mailto:edd@debian.org">edd@debian.org</a><br>
</span><div class="HOEnZb"><div class="h5">______________________________<wbr>_________________<br>
Rcpp-devel mailing list<br>
<a href="mailto:Rcpp-devel@lists.r-forge.r-project.org">Rcpp-devel@lists.r-forge.r-<wbr>project.org</a><br>
<a href="https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel" rel="noreferrer" target="_blank">https://lists.r-forge.r-<wbr>project.org/cgi-bin/mailman/<wbr>listinfo/rcpp-devel</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">Qiang Kou<div><a href="mailto:qkou@umail.iu.edu" target="_blank">qkou@umail.iu.edu</a><br><div>School of Informatics and Computing, Indiana University</div><div><br></div></div></div></div>
</div>