[Rcpp-devel] Wrapping a c++ class with singleton using RCPP Module
Matthew Supernaw - NOAA Federal
matthew.supernaw at noaa.gov
Wed Feb 21 16:51:49 CET 2024
Looks like I posted too soon. I just noticed the memory address from the
"SayHello" function doesn't match.
On Wed, Feb 21, 2024 at 10:47 AM Matthew Supernaw - NOAA Federal <
matthew.supernaw at noaa.gov> wrote:
> Hi Nikhil,
> I'm not exactly sure what you are trying to do, but I hope this simple
> example is helpful.
> Thanks.
> Matthew
>
>
> #include <Rcpp.h>
> using namespace Rcpp;
>
>
> class Foo{
> public:
> static Foo* singleton;
>
> Foo(){
> }
>
> void SayHello(){
> Rcpp::Rcout << "From \"void SayHello()\" -> "<<this<<" -> ";
> Rcpp::Rcout << "hello from Foo.\n";
> }
>
> static Foo* GetSingleton(){
>
> if(singleton == NULL){
> Foo::singleton = new Foo();
> }
> Rcpp::Rcout<<"From \"static Foo* GetSingleton()\" -> memory address
> for singleton is " <<Foo::singleton<<"\n";
> return Foo::singleton;
> }
> };
>
> Foo* Foo::singleton = NULL;
>
> RCPP_EXPOSED_CLASS(Foo)
>
> Foo& GetSingleton(){
> Foo* foo_singleton = Foo::GetSingleton();
> Rcpp::Rcout<<"From \"Foo& GetSingleton()\" -> memory address for
> singleton is " <<foo_singleton<<"\n";
> return *foo_singleton;
> }
>
> RCPP_MODULE(foo) {
> Rcpp::class_<Foo>("Foo")
> .constructor()
> .method("SayHello", &Foo::SayHello);
> Rcpp::function("GetSingleton", &GetSingleton);
>
> }
> //From R
> // library(singleton)
> // library(Rcpp)
> //
> // foo <- Rcpp::Module("foo", PACKAGE = "singleton")
> //
> // foo_singleton<-foo$GetSingleton()
> // foo_singleton$SayHello()
>
> // Output:
> // From "static Foo* GetSingleton()" -> memory address for singleton is
> 0x7fcdf9387590
> // From "Foo& GetSingleton()" -> memory address for singleton is
> 0x7fcdf9387590
> // From "void SayHello()" -> 0x7fcdf9392b60 -> hello from Foo.
>
> On Wed, Feb 21, 2024 at 1:34 AM Nikhil Garg <nikhilgarg.gju at gmail.com>
> wrote:
>
>> Hi,
>>
>> 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.
>>
>> Here is the general structure of the object
>>
>> class Foo {
>> public:
>> Foo();
>> ~Foo();
>>
>> static Foo &getFoo();
>> Foo(Foo const&) = delete;
>> void operator=(Foo const&) = delete;
>> }
>>
>> Regards,
>> Nikhil
>> _______________________________________________
>> Rcpp-devel mailing list
>> Rcpp-devel at lists.r-forge.r-project.org
>> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
>>
>
>
> --
> Matthew Supernaw
> *Scientific Software Developer*
> *National Oceanic and Atmospheric Administration*
> *Office Of Science and Technology*
> *NOAA Fisheries | *U.S. Department of Commerce
> Phone 248 - 396 - 7797
>
>
>
--
Matthew Supernaw
*Scientific Software Developer*
*National Oceanic and Atmospheric Administration*
*Office Of Science and Technology*
*NOAA Fisheries | *U.S. Department of Commerce
Phone 248 - 396 - 7797
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20240221/acfd1c28/attachment.htm>
More information about the Rcpp-devel
mailing list