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 <[email protected]>
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
> [email protected]
> 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
_______________________________________________
Rcpp-devel mailing list
[email protected]
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel