[Rcpp-devel] Wrapping a c++ class with singleton using RCPP Module
Matthew Supernaw - NOAA Federal
matthew.supernaw at noaa.gov
Wed Feb 21 16:47:51 CET 2024
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20240221/c9c8b2d5/attachment.htm>
More information about the Rcpp-devel
mailing list