On Wed, Jun 18, 2014 at 5:22 PM, Romain Francois <rom...@r-enthusiasts.com> wrote:
> Le 19 juin 2014 à 00:15, Tim Keitt <tke...@utexas.edu> a écrit : > > > > On Wed, Jun 18, 2014 at 5:07 PM, Romain Francois <rom...@r-enthusiasts.com > > wrote: > >> Le 18 juin 2014 à 23:54, Tim Keitt <tke...@utexas.edu> a écrit : >> >> >> I'd like to raise a condition other than error or warning. Is that >> possible using the Rcpp api? I assume this can be done via R internals, but >> I'd prefer not to call error() directly (or is that the recommendation?). >> >> THK >> >> >> Definitely not. Rf_error should really only be called from C code. If you >> call it from C++, there is a great chance you'll lose determinism as >> destructors for your c++ objects are very likely not to be called. Most of >> the time, it will just mean you'll never release some objects to the >> garbage collector, but it could also get you leaks or other nice stuff >> depending on what your destructors were supposed to do and did not get a >> chance to do. >> > > That was my understanding. Just wanted to be sure it was still the case. > > >> >> I'm not sure Rcpp has a way to raise an R condition apart from calling >> stop, which usually is good enough. Otherwise, you can borrow from Rcpp11 >> and adapt some code from >> https://github.com/Rcpp11/Rcpp11/blob/450aade7338c16c34618ad0916003e8ca4fb58a6/inst/include/Rcpp/Condition.h >> > > Ah. I see. Eval "stop" in the global env with the condition as the > argument. Clever. > > > It is more of a hack due to lack of proper api from R. > > If you do this, make sure you don't have any c++ object in scope. > Essentially that means you would evaluate `stop( condition )` in a top > level catch block. > Rcpp objects are I assume ok however. I will try "signalCondition" and see what happens. THK -- http://www.keittlab.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