[Rcpp-devel] pass-by-reference for reference objects
Greg Minshall
minshall at umich.edu
Sat Mar 9 01:36:23 CET 2013
hi. i have been trying to understand how to pass objects back and forth
by reference (in order to avoid copying). this works smoothly if one is
calling a method on the object. but, i was having trouble figuring this
out for "free functions" (i.e., non-member functions, i.e.,
non-methods). the term "free function" itself i discovered in
Rcpp_modules.pdf.
the answer is to define a function which has the desired
pass-by-reference class as its first parameter, as a pointer, and then
list that function as a *.method* in the class_ field of the
RCPP_MODULE() call. i.e. (see that attached for the gory details),
given a class
----
class space2d ...
----
one defines a function or two:
----
space2d* psps(space2d* arg, int val) {
arg->set(1, val);
return arg;
}
void vps(space2d* arg, int val) {
arg->set(1, val);
}
----
and then does some module stuff:
----
RCPP_EXPOSED_CLASS(space2d)
using namespace Rcpp;
RCPP_MODULE(test6_module) {
class_<space2d>("space2d")
.constructor()
.method("psps", &psps)
.method("vps", &vps);
}
----
in the above, changes made to arg in both psps() and vps() will be seen
by the caller. in addition, the receiver of the return value of psps()
will *also* hold a shared copy of the reference object.
hth.
(it might be a Nice Addition to remove the limitations of only one
pass-by-reference, location in the formal parameters, etc. someday...)
cheers, Greg
----
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: test6.cc
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20130308/2f7b666a/attachment-0001.ksh>
More information about the Rcpp-devel
mailing list