将 c++ 对象作为指针传递给 Rcpp 中另一个函数的重用
Pass a c++ object as a pointer an reuse in another function in 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 中调用如下内容。
当然,在这个例子中我可以 return 一个 int
到 foo
中的 R,但是在我的原始代码中,a
是一个有点复杂的数据结构,我不想到 return 只有指向这个的指针,所以它可以被另一个名为 bar
的 C++ 函数重用
a <- foo()
bar(a)
在这个例子中,我预计 bar(a)
returned 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++ 中有以下 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 中调用如下内容。
当然,在这个例子中我可以 return 一个 int
到 foo
中的 R,但是在我的原始代码中,a
是一个有点复杂的数据结构,我不想到 return 只有指向这个的指针,所以它可以被另一个名为 bar
a <- foo()
bar(a)
在这个例子中,我预计 bar(a)
returned 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