使用C++;函数作为另一个C++;由导出的Rcpp函数调用的函数 我看到可以使用RCPP将R函数作为参数传递给C++。例如,您可以执行以下操作: // [[Rcpp::export]] arma::mat example_cpp_func(Rcpp::Function my_r_func, arma::mat a){ return Rcpp::as<arma::mat>(my_r_func(a)); }
这在R中是可能的,但是当我尝试使用Rcpp/RcppArmadillo时,我得到了以下错误: 无法将“f1”从“arma::mat()(arma::mat&){aka'arma::mat()(arma::mat&)}转换为“Rcpp::Function”{aka'Rcpp::Function_Impl}使用C++;函数作为另一个C++;由导出的Rcpp函数调用的函数 我看到可以使用RCPP将R函数作为参数传递给C++。例如,您可以执行以下操作: // [[Rcpp::export]] arma::mat example_cpp_func(Rcpp::Function my_r_func, arma::mat a){ return Rcpp::as<arma::mat>(my_r_func(a)); },rcpp,rcpparmadillo,Rcpp,Rcpparmadillo,这在R中是可能的,但是当我尝试使用Rcpp/RcppArmadillo时,我得到了以下错误: 无法将“f1”从“arma::mat()(arma::mat&){aka'arma::mat()(arma::mat&)}转换为“Rcpp::Function”{aka'Rcpp::Function_Impl} 错误消息表示所有的内容:对于C++ f1是一个函数,它期望 ARMA::Mat < /Cord>作为参数,并返回 ARMA::MAT。这与Rcpp::Function大不相同,后者是R函数的薄
错误消息表示所有的内容:对于C++ <代码> f1是一个函数,它期望<代码> ARMA::Mat < /Cord>作为参数,并返回<代码> ARMA::MAT。这与
Rcpp::Function
大不相同,后者是R函数的薄包装。我认为有三种可能性:
f2
函数,该函数需要一个函数指针或带有适当参数的std::function
(需要C++11)Rcpp::Function
的参数添加到f3
中,该参数用于调用f2
Rcpp::Environment
和Rcpp:function
获取适当的R函数没有更多的关于用例的信息,很难提供更多的建议。
< P>错误信息表示:C++到代码> f1 < /C>是一个函数,它期望<代码> ARMA::Mat < /Cord>作为参数,并返回<代码> ARMA::MAT。这与Rcpp::Function
大不相同,后者是R函数的薄包装。我认为有三种可能性:
f2
函数,该函数需要一个函数指针或带有适当参数的std::function
(需要C++11)Rcpp::Function
的参数添加到f3
中,该参数用于调用f2
Rcpp::Environment
和Rcpp:function
获取适当的R函数如果没有关于用例的更多信息,就很难提供更多建议。下面是一个使用Ralf在#1中所写方法的完整示例。您可以在这里使用纯C/C++函数指针,尽管您可以使用C++11做更复杂的事情
#include<RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
typedef arma::mat (*functype)(arma::mat&);
arma::mat f1(arma::mat& a){
return a+1;
}
arma::mat f2(functype g, arma::mat a){
return g(a);
}
//[[Rcpp::export]]
arma::mat f3(arma::mat a){
return f2(f1, a);
}
下面是一个使用Ralf在#1中所述方法的完整示例。您可以在这里使用纯C/C++函数指针,尽管您可以使用C++11做更复杂的事情
#include<RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
typedef arma::mat (*functype)(arma::mat&);
arma::mat f1(arma::mat& a){
return a+1;
}
arma::mat f2(functype g, arma::mat a){
return g(a);
}
//[[Rcpp::export]]
arma::mat f3(arma::mat a){
return f2(f1, a);
}
函数指针的良好参考备忘单:https://f**kingfunctionpointers.com/。不确定是否允许骂人,但URL中有f字:函数指针的OGood参考备忘单:https://f**kingfunctionpointers.com/。不确定是否允许骂人,但URL中有f字:O
#include<RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
typedef arma::mat (*functype)(arma::mat&);
arma::mat f1(arma::mat& a){
return a+1;
}
arma::mat f2(functype g, arma::mat a){
return g(a);
}
//[[Rcpp::export]]
arma::mat f3(arma::mat a){
return f2(f1, a);
}
> f3(matrix(1))
[,1]
[1,] 2