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。
我正在使用 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。