代码之家  ›  专栏  ›  技术社区  ›  Richard Redding

从R访问c++对象数据成员

  •  2
  • Richard Redding  · 技术社区  · 7 年前

    抱歉,如果这是一个愚蠢的问题,因为我不是c++或Rcpp专家,但有可能从R访问c++数据成员吗?我的以下尝试失败:

    测验cpp公司

    #include <Rcpp.h>
    using namespace Rcpp;
    
    class myclass {
    private:
      int k;
    public:
      myclass(int &n) : k(n){}
      int getk() const {return k;}
    };
    
    typedef myclass* pmyclass;
    
    // [[Rcpp::export]]
    XPtr<pmyclass> new_myclass(NumericVector n_) {
      int n = as<int>(n_);
      myclass x(n);
      return(XPtr<pmyclass>(new pmyclass(&x)));
    }
    
    // [[Rcpp::export]]
    NumericVector getk(SEXP xpsexp){
      XPtr<pmyclass> xp(xpsexp);
      pmyclass x = *xp;
      return wrap(x -> getk());
    }
    

    测验R

    library(Rcpp)
    
    sourceCpp('./cpp_attempt/live_in_cpp/minimal_fail/test.cpp')
    
    ptr <- new_myclass(10)
    
    getk(ptr)
    #19274768
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   F. Privé    7 年前

    我会使用

    #include <Rcpp.h>
    using namespace Rcpp;
    
    class myclass {
    private:
      int k;
    public:
      myclass(int n) : k(n){}
      int getk() const {return k;}
    };
    
    // [[Rcpp::export]]
    SEXP new_myclass(int n) {
      XPtr<myclass> ptr(new myclass(n), true);
      return ptr;
    }
    
    // [[Rcpp::export]]
    int getk(SEXP xpsexp){
      XPtr<myclass> xp(xpsexp);
      return xp->getk();
    }