假设我在C++中有以下两个函数:
// [[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;
}
Run Code Online (Sandbox Code Playgroud)
我希望能够在R中调用类似下面的内容.当然,在这个例子中我可以返回一个int到R in foo,但在我的原始代码中,a是一个有点复杂的数据结构,我不想只返回指针为此,它可以被另一个被调用的C++函数重用bar
a <- foo()
bar(a)
Run Code Online (Sandbox Code Playgroud)
在这个例子中我期望bar(a)返回1而不是0.我该如何解决这个问题?
cde*_*man 11
a一旦函数完成,您的初始变量就会超出范围foo.相反,你需要首先初始化你的指针,分配它,然后用它包装它XPtr.以下显示了如何执行此操作的示例.
// [[Rcpp::export]]
SEXP foo() {
int *a = new int(1);
Rcpp::XPtr<int> ptr(a);
return ptr;
}
Run Code Online (Sandbox Code Playgroud)
R代码
Rcpp::sourceCpp('test.cpp')
a <- foo()
bar(a)
[1] 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
381 次 |
| 最近记录: |