我正在尝试在基于 Rcpp 的包中返回一个对象,其中类型libsbml::Model
来自libsbml
C++ 库
最后,我希望我的包能够在R
m <- getModel("text.xml")
m$getListofParameters
我正在尝试以下方法来返回模型
// [[Rcpp::export]]
SEXP getModel (std::string fname) {
libsbml::SBMLReader reader;
libsbml::SBMLDocument* document = reader.readSBMLFromFile(fname);
libsbml::Model* model = document->getModel();
// Rcpp::XPtr<libsbml::Model> modelPtr(model);
// return Rcpp::wrap(modePtr);
return Rcpp::wrap(*model);
}
它给了我一个明显的错误,
cannot initialize a variable of type "SEXP' (aka 'SEXPREC *') with an lvalue of type 'libsbml::Model *const'
可能是因为我需要扩展wrap
为返回libsbml::Model
类型(我认为),基于画廊中最近的一篇文章。Rcpp
我的想法是否正确?这似乎是一项艰巨的任务,因为这libsbml::Model
是一个庞大的课程,而且我是 C++ 的新手,没有面向对象编程的经验。
我还尝试了以下代码(使用Rcpp
模块)
RCPP_MODULE(sbModel){
using namespace Rcpp ;
// we expose the class libsbml::Model as "Model" on the R side
class_<libsbml::Model>("Model")
// exposing the default constructor
.constructor<unsigned int, unsigned int>("Creates a new Model using the given SBML level and version values.")
// exposing member functions -- taken directly from libsbml::Model
.method( "getListofParameters", &libsbml::Model::getListOfParameters(),"Get the list of Parameters of the model")
}
为了暴露libsbml::Model
类的一些方法。但是我Clean and Rebuild
在包上的命令中收到以下消息
call to non-static member function without an object argument
很抱歉这个模糊的问题,但任何关于如何实现我的最终目标的指针libsbml::Model
都R
将非常感激。代码的最终版本可以在 -
https://github.com/sn248/Rcppsbml/blob/master/src/getModel.cpp