Grant, In my own work, I found that input validation is actually significantly easier to do in R. (and even if you did do it in the c++ layer, informative error messages should probably be thrown as exceptions back to R, regardless.)
A giant constructor is not necessary either, as you can send data and arguments to the c++ class through separate functions. This gives you some flexibility if, say, you wanted to write different R wrapper functions using the same underlying computational object. My assumption, based on your original email, was that you were looking for a use case where you might want to call separate computations on different objects of class A from R (thus necessitating exposing A's functions to R), but then also be able to do some computations in an object of class B that could swap different objects of class A in and out. If that isn't the case, then there's probably a simpler, if less elegant, implementation to do what you want. Best, -- Hao Ye h...@ucsd.edu On Tue, Sep 9, 2014 at 6:47 PM, Grant Brown <grant.brow...@gmail.com> wrote: > Thanks for the feedback, I'll definitely consider those options. > > My original motivation (besides the sheer convenience of Rcpp modules as a > way to move work into C++ land) was that there's a lot of data and model > specification information that needs to migrate from R user land to the > lower level library, and I didn't want the main model object to have to > keep track of too much state (or have too huge of a constructor). > > My fallback should this prove unfeasible will probably be to put together > an R layer which can collect and validate the requisite components before > providing them to the giant constructor. > > Thanks! > > > > On Tue, Sep 9, 2014 at 8:16 PM, Dirk Eddelbuettel <e...@debian.org> wrote: > >> >> On 9 September 2014 at 19:56, Grant Brown wrote: >> | Hi folks, >> | >> | I'm building several Rcpp modules which specify parts of a complicated >> | statistical model, and want to pass them to a main module for use. Is >> there an >> | easy way to do this? >> | >> | Below is a simplified example, with question marks where I'm not sure >> what to >> | do. I've tried accepting a pointer to A, playing with using XPtrs, and >> a bunch >> | of things which made far less sense, but so far no luck. >> | >> | Any suggestions or links to sections of the docs I should revisit would >> be >> | appreciated. >> >> That's neat and somewhat ambitious. Not sure it can be done; Romain may >> have >> pointers for you. >> >> I prefer to keep things simple; at least initially. I sometimes create a >> larger class (possibly as a singleton) and then have accessors from R >> which >> initialize, supply parameters, alter parameters, request computation, ... >> You >> can then play with factories, and components, and inheritance, etc pp. >> >> By keeping the interface simple I can set it up in a way which lets me >> test >> the functionality also in a simple main away from R. But that may just >> be me. >> >> Dirk >> >> >> | Thanks, >> | -Grant >> | >> | >> | ## file: A.cpp >> | >> | class A >> | { >> | public: >> | A(); >> | ~A(); >> | }; >> | >> | class B >> | { >> | public: >> | B(); >> | void DoSomethingWithInstanceOfA(???); >> | ~B(); >> | }; >> | >> | A::A() >> | { >> | // Do stuff >> | } >> | >> | B::B() >> | { >> | // Do stuff >> | } >> | >> | B::DoSomethingWithInstanceOfA(???) >> | { >> | // Do stuff >> | } >> | >> | RCPP_MODULE(mod_A) >> | { >> | using namespace Rcpp; >> | class_<A>( "A" ) >> | .constructor(); >> | } >> | >> | RCPP_MODULE(mod_B) >> | { >> | using namespace Rcpp; >> | class_<B>( "B" ) >> | .constructor() >> | .method("DoSomethingWithInstanceOfA", &B::DoSomethingWithInstanceOfA); >> | } >> | >> | >> | ### End pseduo c++ code >> | >> | >> | _______________________________________________ >> | 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 >> >> -- >> http://dirk.eddelbuettel.com | @eddelbuettel | e...@debian.org >> > > > _______________________________________________ > 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