Rcpp:使用object作为参数调用函数

时间:2017-11-05 08:49:59

标签: c++11 rcpp

我在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 */

说我拨打func1(1e7),填写a - 对象中的地图。我需要将此A - 对象传递给其他函数,如上所示func2

但是,func2的示例不起作用。在Rcpp - 框架内,使用前一个函数中定义的对象调用func2的正确且最有效的方法是什么?

1 个答案:

答案 0 :(得分:4)

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;
}

R代码

a = func1(10)
func2(a)

aExternal pointer