假设A在C++中有以下2个函数:
// [[Rcpp::export]] SEXP foo() { int a = 1; Rcpp::XPtr<int> ptr(&a, true); return ptr; } // [[Rcpp::export]] int bar(SEXP a){ Rcpp::XPtr<int> x(a); int b = *x; return b; }
我希望能在R中调用以下内容。 当然,在这个例子中,我可以返回 int 到R in foo a 是一个比较复杂的数据结构,我不会只返回指针,因此它可以被另一个C++函数重用。 bar
int
foo
a
bar
a <- foo() bar(a)
在这个例子中,我期望 bar(a)
bar(a)
初始变量 a 一旦函数在中完成,就超出范围 foo . 相反,您需要先初始化指针,分配它,然后用 XPtr
XPtr
// [[Rcpp::export]] SEXP foo() { int *a = new int(1); Rcpp::XPtr<int> ptr(a); return ptr; }
R代码
Rcpp::sourceCpp('test.cpp') a <- foo() bar(a) [1] 1