我在Rcpp中有一个函数,该函数在一个类中创建一个很长的地图结构。我在下面给出了一个简单的例子:
#include <Rcpp.h>
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]]
void func1(const size_t limit) {
A a;
a.fill_map(limit);
}
/* NOT WORKING */
// [[Rcpp::export]]
void func2(A a)
{
std::cout << a.size_map() << "\n";
}
/* NOT WORKING */
Run Code Online (Sandbox Code Playgroud)
假设我致电func1(1e7),这将在a-object中填满地图。我需要将此对象传递A给其他函数,如上所示func2。
但是,我的示例func2不起作用。在Rcpp-framework中,用上func2一个函数中定义的对象进行调用的正确,最有效的方法是什么?
C ++代码
#include <Rcpp.h>
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);
ptr->fill_map(limit);
return(ptr);
}
// [[Rcpp::export]]
void func2(XPtr<A> ptr)
{
Rcout << ptr->size_map() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
R代码
a = func1(10)
func2(a)
Run Code Online (Sandbox Code Playgroud)
a作为一个External pointer。