首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从R访问c++对象数据成员

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

Stack Overflow用户
提问于 2017-12-08 23:27:05
回答 1查看 233关注 0票数 2

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

test.cpp

代码语言:javascript
复制
#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());
}

test.R

代码语言:javascript
复制
library(Rcpp)

sourceCpp('./cpp_attempt/live_in_cpp/minimal_fail/test.cpp')

ptr <- new_myclass(10)

getk(ptr)
#19274768
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-09 00:43:14

我会用

代码语言:javascript
复制
#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();
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47717325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档