這可能是一個基本問題,我一直在努力將用戶創建的C++函數傳遞給Rcpp。我閱讀了文檔,似乎我應該使用XPtr提供的SEXP包裝(鏈接:http://gallery.rcpp.org/articles/passing-cpp-function-pointers/)但是,我仍然不太清楚如何正確執行此操作。在接下來的內容中,我想使用一個函數funcPtrG作爲testfun中的一個參數,C++方式。我得到了如下錯誤:傳遞用戶在rcpp中創建C++函數作爲參數
#include <RcppArmadillo.h>
typedef double (*funcPtrG)(double theta, double gamma);
using namespace Rcpp;
// [[Rcpp::export]]
double GGfuncpp(double theta, double gamma){
double new_gamma = 0;
new_gamma = theta*gamma + R::rnorm(0,1)*0.0001;
return new_gamma;
}
// [[Rcpp::export]]
double testfun(funcPtrG fun2, double theta, double gamma){
double x= 0;
x = fun2(theta,gamma);
return x;
}
Error: cannot convert 'SEXP' to 'double (*)(double, double)' in initialization
我試圖把x = XPtr<funcPtr>fun2(theta,gamma)
但沒有給出期望的結果。
我願意!對不起,我會編輯。在我原來的程序中,我有// [[Rcpp :: export]]在所有函數之前 – dleal