gpt4 book ai didi

c++ - 通过 std::shared_ptr 使用 Rcpp 和 RcppParallel 的线程安全函数指针

转载 作者:太空宇宙 更新时间:2023-11-04 15:31:21 29 4
gpt4 key购买 nike

我想在 RcppPralel worker 中使用线程安全函数指针。但是我已经对这个小例子产生了疑问。无论我是在包中使用它并在 DESCRIPTION 文件中添加 SystemRequirements: C++11 ,还是在标准 cpp 文件中使用它并添加 //[[Rcpp::plugins (cpp11)]] 我得到了同样的错误:“shared_ptr”不是“std”的成员。谁能帮帮我吗?谢谢!

#include <Rcpp.h>
using namespace Rcpp;
using namespace std;


double f1 (double x, double y) {
return x * y;
}

double f2 (double x, double y) {
std::shared_ptr<int> p1;
std::cout << "p1: " << p1.use_count() << '\n';
return x + y;
}

typedef double (*funcPtr)(double x, double y);

std::shared_ptr<funcPtr> selectf(std::string abc) {

std::shared_ptr<funcPtr> fp = NULL;

if(abc == "a"){
fp = std::make_shared<funcPtr>(new funcPtr(&f1));
}else {
fp = std::make_shared<funcPtr>(new funcPtr(&f2));
}
return fp;
}


// [[Rcpp::export]]
double f0(double x, double y, std::string abc){
double ret;
df = selectf(abc);
ret = df(x, y);
return(ret);
}


/*** R
if(FALSE){
f0(10, 10, "a")
}
*/

系统信息:

> sessionInfo()
R version 3.5.0 (2018-04-23)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

Matrix products: default

locale:
[1] LC_COLLATE=German_Germany.1252
[2] LC_CTYPE=German_Germany.1252
[3] LC_MONETARY=German_Germany.1252
[4] LC_NUMERIC=C
[5] LC_TIME=German_Germany.1252

attached base packages:
[1] stats graphics grDevices utils datasets
[6] methods base

loaded via a namespace (and not attached):
[1] compiler_3.5.0 R6_2.2.2 magrittr_1.5
[4] tools_3.5.0 withr_2.1.2 roxygen2_6.0.1
[7] yaml_2.1.19 memoise_1.1.0 Rcpp_0.12.18
[10] xml2_1.2.0 stringi_1.2.2 stringr_1.3.1
[13] digest_0.6.15 commonmark_1.5 devtools_1.13.5

最佳答案

std::shared_ptr在 header 中声明 <memory> .尝试:

#include <memory>

您可以找到它的文档 here .

关于c++ - 通过 std::shared_ptr 使用 Rcpp 和 RcppParallel 的线程安全函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51481236/

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