Iirc, this is not implemented yet. 

There is a chance we might add this feature in the future. 

Cheers, 

Romain



Le 21 déc. 2011 à 10:59, Yasir Suhail <yusuh...@gmail.com> a écrit :

> I need to pass a class as an argument in a function I am exposing to R. From 
> the skeleton package module, let us say that I have
> 
> class World {
> public:
>     World() : msg("hello"){}
>     void set(std::string msg) { this->msg = msg; }
>     std::string greet() { return msg; }
>     void addMsg(World& w2) {
>       msg = msg + w2.msg;
>     }
> private:
>     std::string msg;
> };
> 
> However, this gives errors of the sort
> /usr/local/lib/R/site-library/Rcpp/include/Rcpp/module/Module_generated_CppMethod.h:186:4:
>  error: invalid initialization of non-const reference of type ‘World&’ from 
> an rvalue of type ‘World’
> In file included from 
> /usr/local/lib/R/site-library/Rcpp/include/RcppCommon.h:306:0,
>                  from /usr/local/lib/R/site-library/Rcpp/include/Rcpp.h:27,
>                  from rcpp_module.cpp:1:
> /usr/local/lib/R/site-library/Rcpp/include/Rcpp/traits/Exporter.h: In 
> constructor ‘Rcpp::traits::Exporter<T>::Exporter(SEXPREC*) [with T = World, 
> SEXPREC* = SEXPREC*]’:
> /usr/local/lib/R/site-library/Rcpp/include/Rcpp/as.h:51:51:   instantiated 
> from ‘T Rcpp::internal::as(SEXPREC*, Rcpp::traits::r_type_generic_tag) [with 
> T = World, SEXPREC* = SEXPREC*]’
> /usr/local/lib/R/site-library/Rcpp/include/Rcpp/as.h:75:89:   instantiated 
> from ‘T Rcpp::as(SEXPREC*) [with T = World, SEXPREC* = SEXPREC*]’
> /usr/local/lib/R/site-library/Rcpp/include/Rcpp/module/Module_generated_CppMethod.h:186:4:
>    instantiated from ‘SEXPREC* Rcpp::CppMethod1<Class, void, 
> U0>::operator()(Class*, SEXPREC**) [with Class = World, U0 = World&, SEXPREC* 
> = SEXPREC*]’
> rcpp_module.cpp:86:1:   instantiated from here
> /usr/local/lib/R/site-library/Rcpp/include/Rcpp/traits/Exporter.h:31:37: 
> error: no matching function for call to ‘World::World(SEXPREC*&)’
> rcpp_module.cpp:30:5: note: candidates are: World::World()
> rcpp_module.cpp:28:13: note:                 World::World(const World&)
> make: *** [rcpp_module.o] Error 1
> 
> Looking at http://dirk.eddelbuettel.com/code/rcpp/Rcpp-extending.pdf, it 
> seems that I can extend Rcpp::as to account for my classes, but I still have 
> two questions:
> 1. How do I define the constructor World(SEXP)? Is there a working example 
> somewhere for a user defined C++ class?
> 2. Can I also use pointers and pass-by-reference as these are more often used 
> in real C++ code.
> 
> In short, I'd appreciate a way to pass my C++ classes (as the class and also 
> by ref. or pointer) that have been exposed to R as arguments to exposed 
> functions. How do I achieve that?
> 
> Thanks!
> _______________________________________________
> Rcpp-devel mailing list
> Rcpp-devel@lists.r-forge.r-project.org
> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
_______________________________________________
Rcpp-devel mailing list
Rcpp-devel@lists.r-forge.r-project.org
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel

Reply via email to