Rcpp:从包含类的代码创建包

时间:2017-11-06 10:15:02

标签: c++ rcpp

我正在使用Rcpp制作R-package。这是一个显示我的设置的MWE:

# include <RcppArmadillo.h>

// [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp ;

class A
{
private:
  std::map<int, int> m_map;

public:
  void fill_map(const size_t limit)
  {
    for(size_t i=0; i<limit; ++i)
    {
      m_map[i] = i;
    }
  }

  size_t size_map(){return m_map.size();}
};


// [[Rcpp::export]]
XPtr<A> func1(const size_t limit)
{
  XPtr<A> ptr(new A(), true);
  return(ptr);
}

我可以使用sourceCpp编译它而不会出错。但是,当我使用RccpArmadillo(遵循此tutorial)从此生成包时,编译时出现以下错误:RcppExports.cpp:20:6: error: ‘A’ was not declared in this scope

为什么会出现错误以及如何解决?

注意:本教程适用于在不涉及类时创建包。

1 个答案:

答案 0 :(得分:2)

请参阅Rcpp Attributes插图:您可能需要使用定义mypackagename_types.h创建文件A。按照惯例,此包含在生成的界面文件中,并且您的类型A将为其所知。

一个相当简单的例子是Rblpapi_types.h包中的Rblpapi。您可以看到包含的标头文件on line 4 of the interface file RcppExports.cpp