通过std :: shared_ptr使用Rcpp和RcppParallel的线程安全函数指针 [英] Threadsafe function pointer with Rcpp and RcppParallel via std::shared_ptr
问题描述
我想使用一个在RcppPrallel worker中应用的线程安全函数指针.但是我已经有这个小例子的问题了.无论是在程序包中使用它,然后在Description文件中添加SystemRequirements: C++11
,还是在标准cpp文件中使用它并添加// [[Rcpp::plugins(cpp11)]]
,我都会得到相同的错误:'shared_ptr'不是'标准"..谁能帮帮我吗?谢谢!
I would like to use a threadsafe function pointer to be applied in an RcppPrallel worker. But I have already problems with this tiny example. No matter if I use it in a package and add SystemRequirements: C++11
in the DESCRIPTION file, or use it in a standard cpp file and add // [[Rcpp::plugins(cpp11)]]
I get the same Errors: 'shared_ptr' is not a member of 'std'. Can anyone please help me? Thank you!
#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
在标头<memory>
中声明.试试:
std::shared_ptr
is declared in the header <memory>
. Try:
#include <memory>
您可以在此处找到该文档.
这篇关于通过std :: shared_ptr使用Rcpp和RcppParallel的线程安全函数指针的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!