将c对象作为指针传递给Rcpp中的另一个函数重用
作者:互联网
假设我在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中调用类似下面的内容.
当然,在这个例子中,我可以在foo中将一个int返回给R,但在我的原始代码中,a是一个有点复杂的数据结构,我不想只返回指向这个的指针,所以它可以被另一个C重用功能叫做吧
a <- foo()
bar(a)
在这个例子中,我预计bar(a)返回1而不是0.我该如何解决这个问题?
解决方法:
一旦函数在foo中完成,你的初始变量a就会超出范围.相反,您需要首先初始化指针,分配它,然后用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
标签:c,r,rcpp 来源: https://codeday.me/bug/20191001/1838011.html