<div dir="ltr"><div style="font-family:arial,sans-serif;font-size:19.2000007629395px">Dear all, I have posted this few days ago, can anybody helps me with this compilation error ? I think I understand the valid method, but do not have idea why there is no matching function... It is from Romain's example - <a href="http://lists.r-forge.r-project.org/pipermail/rcpp-devel/2010-November/001326.html" style="font-family:arial;font-size:small" target="_blank">http://lists.r-forge.r-project.org/pipermail/rcpp-devel/2010-November/001326.html</a>. I have attached the output of the compiling errors.</div>
<div style="font-family:arial,sans-serif;font-size:19.2000007629395px"><br></div><div style="font-family:arial,sans-serif;font-size:19.2000007629395px">Thanks a bunch !</div>
<div style="font-family:arial,sans-serif;font-size:19.2000007629395px"><br></div><div style="font-family:arial,sans-serif;font-size:19.2000007629395px"><br></div><div style="font-family:arial,sans-serif;font-size:19.2000007629395px">
#include <Rcpp.h></div><div style="font-family:arial,sans-serif;font-size:19.2000007629395px"><br></div><div style="font-family:arial,sans-serif;font-size:19.2000007629395px">using namespace Rcpp;<br>using namespace std;</div>
<div style="font-family:arial,sans-serif;font-size:19.2000007629395px"><br></div><div style="font-family:arial,sans-serif;font-size:19.2000007629395px">class Randomizer {<br>public:</div><div style="font-family:arial,sans-serif;font-size:19.2000007629395px">
Randomizer(){}</div><div style="font-family:arial,sans-serif;font-size:19.2000007629395px"> NumericVector get( int n ){<br> RNGScope scope ;<br> return runif( n, 0.0, 1.0 );<br> }</div>
<div style="font-family:arial,sans-serif;font-size:19.2000007629395px"> List get( IntegerVector n ){<br> RNGScope scope ;<br> int size = n.size() ;<br> List res( size) ;<br>
for( int i=0; i<size; i++){<br> res[i] = runif(n[i] , 0.0, 1.0 ) ;<br> }<br> return res ;<br> }</div><div style="font-family:arial,sans-serif;font-size:19.2000007629395px">
} ;</div><div style="font-family:arial,sans-serif;font-size:19.2000007629395px">bool get_int_valid(SEXP* args, int nargs){<br> if( nargs != 1 ) return false ;<br> if( TYPEOF(args[0]) != INTSXP ) return false ;<br>
return ( LENGTH(args[0]) == 1 ) ;<br>}</div><div style="font-family:arial,sans-serif;font-size:19.2000007629395px">RCPP_MODULE(mod){</div><div style="font-family:arial,sans-serif;font-size:19.2000007629395px"> using namespace Rcpp;</div>
<div style="font-family:arial,sans-serif;font-size:19.2000007629395px"> class_<Randomizer>( "Randomizer" )</div><div style="font-family:arial,sans-serif;font-size:19.2000007629395px"> .default_constructor()</div>
<div style="font-family:arial,sans-serif;font-size:19.2000007629395px"> .method( "get" , ( NumericVector (Randomizer::*)(int) )(&Randomizer::get) , &get_int_valid ) <br> .method( "get" , ( List (Randomizer::*)(IntegerVector) )(&Randomizer::get) ) <br>
;</div><div style="font-family:arial,sans-serif;font-size:19.2000007629395px"><br>}</div><div><br></div><br><div class="gmail_quote">---------- Forwarded message ----------<br>From: <b class="gmail_sendername">Chaomei Lo</b> <span dir="ltr"><<a href="mailto:chaomeilo@gmail.com" target="_blank">chaomeilo@gmail.com</a>></span><br>
Date: Sat, Aug 23, 2014 at 12:51 PM<br>Subject: Compilation errors on overloaded methods in modules - one with dispatch based on the arguments<br>To: "<a href="mailto:rcpp-devel@lists.r-forge.r-project.org" target="_blank">rcpp-devel@lists.r-forge.r-project.org</a>" <<a href="mailto:rcpp-devel@lists.r-forge.r-project.org" target="_blank">rcpp-devel@lists.r-forge.r-project.org</a>><br>
<br><br><div dir="ltr"><div>Hi, Romain,</div><div><br></div><div>I have created overloaded methods have argument types like blow.</div><div><br></div><div>fn(List)</div><div>fn(List, NumericMatrix)</div><div>fn(List, DataFrame)</div>
<div><br></div><div>The first function works fine, and adding the second one with different number of arguments works fine too. With the third one added, it compiled fine but when I invoked the third function I got the error message : "Error: not compatible with requested type". </div>
<div><br></div><div>Then I review your webpage (<a href="http://lists.r-forge.r-project.org/pipermail/rcpp-devel/2010-November/001326.html" target="_blank">http://lists.r-forge.r-project.org/pipermail/rcpp-devel/2010-November/001326.html</a>) about the overloaded methods in modules, I tested the following code, but I got a huge of errors output when I compiled it. Not only compilation failure, also I do not quite understand this example using dispatch. Do you think it is possible to achieve the goal of overloaded methods described above using Rcpp ?</div>
<div><br></div><div>#include <Rcpp.h></div><div><br></div><div>using namespace Rcpp;<br>using namespace std;</div><div><br></div><div>class Randomizer {<br>public:</div><div> Randomizer(){}</div><div> NumericVector get( int n ){<br>
RNGScope scope ;<br> return runif( n, 0.0, 1.0 );<br> }</div><div> List get( IntegerVector n ){<br> RNGScope scope ;<br> int size = n.size() ;<br>
List res( size) ;<br> for( int i=0; i<size; i++){<br> res[i] = runif(n[i] , 0.0, 1.0 ) ;<br> }<br> return res ;<br> }</div><div>} ;</div>
<div>bool get_int_valid(SEXP* args, int nargs){<br> if( nargs != 1 ) return false ;<br> if( TYPEOF(args[0]) != INTSXP ) return false ;<br> return ( LENGTH(args[0]) == 1 ) ;<br>}</div><div>RCPP_MODULE(mod){</div>
<div> using namespace Rcpp;</div><div> class_<Randomizer>( "Randomizer" )</div><div> .default_constructor()</div><div> .method( "get" , ( NumericVector (Randomizer::*)(int) )(&Randomizer::get) , &get_int_valid ) <br>
.method( "get" , ( List (Randomizer::*)(IntegerVector) )(&Randomizer::get) ) <br> ;</div><div><br>}</div><div><br></div><div>Thanks a lot.</div><span><font color="#888888"><div>
Chaomei</div></font></span></div>
</div><br></div>