Rcpp:从包含 class 的代码制作一个包

Rcpp: Making a package from code containing a class

我正在使用 Rcpp 制作 R 包。这是显示我的设置的 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

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


注意:当 类 不涉及时,本教程可以很好地创建包。

参见 Rcpp Attributes 小插图:您可能需要创建一个文件 mypackagename_types.h 并定义 A。按照惯例,这个 包含在生成的接口文件中,这样你的类型 A 就会知道。

一个相当简单的例子是Rblpapi_types.h from our Rblpapi package. You can see the header file being included on line 4 of the interface file RcppExports.cpp