通过std :: shared_ptr使用Rcpp和RcppParallel的线程安全函数指针 [英] Threadsafe function pointer with Rcpp and RcppParallel via std::shared_ptr

查看:143
本文介绍了通过std :: shared_ptr使用Rcpp和RcppParallel的线程安全函数指针的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用一个在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆