我正在尝试将 C 库中的 C 结构公开到 R 中。例如:
struct A {
int flag;
// ...
}
库提供 API 来构造和销毁是很常见的A
:
A* initA();
void freeA(A* a);
谢谢RCPP_MODULE
,不考虑析构函数就很容易暴露它:
#include <Rcpp.h>
using namespace Rcpp;
RCPP_EXPOSED_CLASS(A)
RCPP_MODULE(A) {
class_<A>("A")
.field("flag", &A::flag)
;
}
//'@export
//[[Rcpp::export]]
SEXP init() {
BEGIN_RCPP
return wrap(*initA());
END_RCPP
}
A
我喜欢这种方法,但它可能会导致内存泄漏,因为它在垃圾收集期间无法正确销毁。添加.finalizer(freeA)
会RCPP_MODULE
导致free
两次错误。
使用XPtr<A, freeA>
可能是一个解决方案,但我需要手动定义函数来公开A.flag
.
一般来说,如何使用 Rcpp 将 C 库中的 C 结构暴露到 R 中?