<div dir="ltr">Looks like I posted too soon. I just noticed the memory address from the "SayHello" function doesn't match. </div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Feb 21, 2024 at 10:47 AM Matthew Supernaw - NOAA Federal <<a href="mailto:matthew.supernaw@noaa.gov">matthew.supernaw@noaa.gov</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hi Nikhil,<div>I'm not exactly sure what you are trying to do, but I hope this simple example is helpful. </div><div>Thanks.</div><div>Matthew</div><div><br></div><div><br>#include <Rcpp.h><br>using namespace Rcpp;<br><br><br>class Foo{<br>public:<br> static Foo* singleton;<br> <br> Foo(){<br> }<br> <br> void SayHello(){<br> Rcpp::Rcout << "From \"void SayHello()\" -> "<<this<<" -> ";<br> Rcpp::Rcout << "hello from Foo.\n";<br> }<br> <br> static Foo* GetSingleton(){<br> <br> if(singleton == NULL){<br> Foo::singleton = new Foo();<br> }<br> Rcpp::Rcout<<"From \"static Foo* GetSingleton()\" -> memory address for singleton is " <<Foo::singleton<<"\n";<br> return Foo::singleton;<br> }<br>};<br><br>Foo* Foo::singleton = NULL;</div><div><br>RCPP_EXPOSED_CLASS(Foo)<br><br> Foo& GetSingleton(){<br> Foo* foo_singleton = Foo::GetSingleton();<br> Rcpp::Rcout<<"From \"Foo& GetSingleton()\" -> memory address for singleton is " <<foo_singleton<<"\n";<br> return *foo_singleton;<br> }<br><br>RCPP_MODULE(foo) {<br> Rcpp::class_<Foo>("Foo")<br> .constructor()<br> .method("SayHello", &Foo::SayHello);<br> Rcpp::function("GetSingleton", &GetSingleton);<br> <br>}<br>//From R<br>// library(singleton)<br>// library(Rcpp)<br>// <br>// foo <- Rcpp::Module("foo", PACKAGE = "singleton")<br>// <br>// foo_singleton<-foo$GetSingleton()<br>// foo_singleton$SayHello()<br> <br>// Output:<br>// From "static Foo* GetSingleton()" -> memory address for singleton is 0x7fcdf9387590<br>// From "Foo& GetSingleton()" -> memory address for singleton is 0x7fcdf9387590<br>// From "void SayHello()" -> 0x7fcdf9392b60 -> hello from Foo.<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Feb 21, 2024 at 1:34 AM Nikhil Garg <<a href="mailto:nikhilgarg.gju@gmail.com" target="_blank">nikhilgarg.gju@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>Hi,</div><div><br></div><div>I am looking for some advice or hoping someone can point me in the right direction for wrapping a C++ class with singleton using Rcpp. I have been using RCPP modules for some of this work but got stuck with a C++ object which returns a singleton.<br></div><div><br></div><div>Here is the general structure of the object</div><div><br></div><div></div><div><span style="font-family:monospace">class Foo {</span></div><div><span style="font-family:monospace"> public:</span></div><div><span style="font-family:monospace"> Foo();</span></div><div><span style="font-family:monospace"> ~Foo();</span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace"> static Foo &getFoo();</span></div><div><span style="font-family:monospace"> Foo(Foo const&) = delete;</span></div><div><span style="font-family:monospace"> void operator=(Foo const&) = delete;<br></span></div><div><span style="font-family:monospace">}</span></div><br><div>Regards,</div><div>Nikhil<br></div><div><span class="gmail_signature_prefix"></span></div></div>
_______________________________________________<br>
Rcpp-devel mailing list<br>
<a href="mailto:Rcpp-devel@lists.r-forge.r-project.org" target="_blank">Rcpp-devel@lists.r-forge.r-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-project.org/cgi-bin/mailman/listinfo/rcpp-devel</a><br>
</blockquote></div><br clear="all"><div><br></div><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div>Matthew Supernaw<br><i><font color="#666666">Scientific Software Developer</font></i></div><div><span style="line-height:16px;font-family:arial,sans-serif"><em><font color="#666666">National Oceanic and Atmospheric Administration</font></em></span></div><div><i><font face="arial, sans-serif" color="#666666">Office Of Science and Technology</font></i></div><div><font color="#666666"><i><font face="arial, sans-serif">NOAA Fisheries | </font></i><span style="font-family:Arial;font-size:13.3333px">U.S. Department of Commerce</span></font></div><div><font color="#666666">Phone 248 - 396 - 7797</font><br><br></div><br></div></div>
</blockquote></div><br clear="all"><div><br></div><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div>Matthew Supernaw<br><i><font color="#666666">Scientific Software Developer</font></i></div><div><span style="line-height:16px;font-family:arial,sans-serif"><em><font color="#666666">National Oceanic and Atmospheric Administration</font></em></span></div><div><i><font face="arial, sans-serif" color="#666666">Office Of Science and Technology</font></i></div><div><font color="#666666"><i><font face="arial, sans-serif">NOAA Fisheries | </font></i><span style="font-family:Arial;font-size:13.3333px">U.S. Department of Commerce</span></font></div><div><font color="#666666">Phone 248 - 396 - 7797</font><br><br></div><br></div></div>