[Rcpp-devel] Rcpp and ExternalPtr
Tim Keitt
tkeitt at utexas.edu
Mon Dec 8 19:42:55 CET 2014
On Mon, Dec 8, 2014 at 10:34 AM, Dirk Eddelbuettel <edd at debian.org> wrote:
>
> On 8 December 2014 at 09:58, Tim Keitt wrote:
> |
> |
> | On Sun, Dec 7, 2014 at 4:52 AM, Dirk Eddelbuettel <edd at debian.org>
> wrote:
> |
> |
> |
> | What you are after, if I understand it correctly, is (close to) a
> common
> | and
> | well studied idiom called 'RAII': Resource Acquisition is
> Initialization.
> | Two
> | quick links, and you will find many more:
> |
> |
> |
> | I don't know if this example is helpful. Any class that can be
> initialized with
> | an SEXP and has an SEXP member function can be used as the argument or
> return
> | type from an Rcpp function call. I wrote this wrapper to avoid
> dereferencing
> | passed null pointers and as a return type for a lot of functions where I
> want
> | an R NULL return if the pointer is null.
>
> Nice post for the r-devel list :) But as you don't use Rcpp here...
>
Touche...
>
> In essence Rcpp::XPtr does this for you. If you rewrote the code in terms
> of
> Rcpp::XPtr, it might make for a nice post for the Rcpp Gallery.
>
When I eventually get back to R coding, I'll have to take another look at
XPtr. I do not recall now why I did not use it. Perhaps I wanted a single
point for checking null pointers transparently.
THK
>
> Dirk
>
> | THK
> |
> |
> | class
> | RGDALHandleWrapper
> | {
> | public:
> | RGDALHandleWrapper(void* h)
> | : handle(h) {} // If initialized NULL will
> return NULL
> | SEXP
> | RGDALHandleWrapper(const SEXP h)
> | : handle(R_ExternalPtrAddr(h))
> | {
> | if ( !handle ) stop("Null pointer passed to
> function\n"
> | );
> | }
> | operator SEXP() const
> | {
> | return handle ? // Return NULL SEXP on NULL
> pointer
> | R_MakeExternalPtr(handle, R_NilValue,
> R_NilValue) :
> | R_NilValue;
> | }
> | void* operator*() const { return handle; }
> | private:
> | void* handle;
> | };
> |
> |
> |
> |
> | --
> | http://www.keittlab.org/
>
> --
> http://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org
>
--
http://www.keittlab.org/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20141208/ff039022/attachment-0001.html>
More information about the Rcpp-devel
mailing list