代码之家  ›  专栏  ›  技术社区  ›  Min

问题:从Rcpp函数返回c样式的指针[duplicate]

  •  0
  • Min  · 技术社区  · 7 年前

    假设A在C++中有以下2个函数:

    // [[Rcpp::export]]
    SEXP foo() {
    
      int a = 1;
    
      Rcpp::XPtr<int> ptr(&a, true);
    
      return ptr;
    }
    
    // [[Rcpp::export]]
    int bar(SEXP a){
    
      Rcpp::XPtr<int> x(a);
      int b = *x;
    
      return b;
    }
    

    我希望能在R中调用以下内容。 当然,在这个例子中,我可以返回 int 到R in foo a 是一个比较复杂的数据结构,我不会只返回指针,因此它可以被另一个C++函数重用。 bar

    a <- foo()
    bar(a)
    

    在这个例子中,我期望 bar(a)

    0 回复  |  直到 9 年前
        1
  •  12
  •   cdeterman    9 年前

    初始变量 a 一旦函数在中完成,就超出范围 foo . 相反,您需要先初始化指针,分配它,然后用 XPtr

    // [[Rcpp::export]]
    SEXP foo() {
    
      int *a = new int(1);
    
      Rcpp::XPtr<int> ptr(a);
    
      return ptr;
    }
    

    R代码

    Rcpp::sourceCpp('test.cpp')
    
    a <- foo()
    bar(a)
    [1] 1
    
    推荐文章