gpt4 book ai didi

rcpp - 在 Rcpp 函数中将类作为参数传递

转载 作者:行者123 更新时间:2023-12-04 08:07:41 29 4
gpt4 key购买 nike

我正在阅读很棒的 Rcpp vignette关于使用 Rcpp 模块公开 C++ 类和函数。在这种情况下,是否可以创建一个 Rcpp 函数,该函数具有一个类型为 Uniform 的类作为参数之一,并且不属于要导出的特定模块的一部分?下面这只是我所想的模型。这个例子取自同一个小插图。答案可能已经存在。如果有人能指出正确的地方,那就太好了。

#include <RcppArmadillo.h>
using namespace Rcpp;

class Uniform {

public:
Uniform(double min_, double max_) :
min(min_), max(max_) {}

NumericVector draw(int n) const {
RNGScope scope;
return runif(n, min, max);
}

double min, max;
};


double uniformRange(Uniform* w) {
return w->max - w->min;
}


RCPP_MODULE(unif_module) {

class_<Uniform>("Uniform")

.constructor<double,double>()
.field("min", &Uniform::min)
.field("max", &Uniform::max)

.method("draw", &Uniform::draw)
.method("range", &uniformRange)
;
}

/// JUST AN EXAMPLE: WON'T RUN
// [[Rcpp::export]]
double test(double z, Uniform* w) {
return z + w->max ;
}

最佳答案

根据 Dirk 的评论,我发布了一个可能的解决方案。这个想法是创建一个带有指针的类对象的新实例,并创建一个可以进一步作为函数参数传递的外部指针。以下是我从他的 post 中收集到的内容:

#include <RcppArmadillo.h>
using namespace Rcpp;

class Uniform {

public:
Uniform(double min_, double max_) :
min(min_), max(max_) {}

NumericVector draw(int n) const {
RNGScope scope;
return runif(n, min, max);
}

double min, max;
};

// create external pointer to a Uniform object
// [[Rcpp::export]]
XPtr<Uniform> getUniform(double min, double max) {
// create pointer to an Uniform object and
// wrap it as an external pointer
Rcpp::XPtr<Uniform> ptr(new Uniform( min, max ), true);
// return the external pointer to the R side
return ptr;
}

/// CAN RUN IT NOW:
// [[Rcpp::export]]
double test(double z, XPtr<Uniform> xp) {

double k = z + xp ->max;

return k;

}

关于rcpp - 在 Rcpp 函数中将类作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66142449/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com