2014-08-27 21 views
1

我創建了一個RCPP - 軟件包與包含以下類別的模塊:RCPP類包和作爲

更新

C++部分:

class A 
{ 
    public: 
    void concat(A & x) 
    { 
    .... 
    } 
} 

隨着RCPP模塊 - 部分

RCPP_MODULE(Foo){ 
using namespace Rcpp; 

class_<A>("A") 
.method("concat", &A::concat) 
; 
} 

而且R-部分

x <- new(A) 
y <- new(A) 

的問題

x$concat(y) 

從參數1 'SEXP' 到 'A' 沒有已知的轉換。

我認爲的問題是,沒有專門的包裝和作爲功能。 對我來說目前還不清楚,我是否需要爲A類創建這個模板函數? 我是否需要創建一個Rcpp:Xptr?

+0

我不知道我理解你的問題是什麼。您可能需要擴展一點,我建議您查看一些使用模塊的現有軟件包和/或從一個非常簡單的軟件包開始。 – 2014-08-27 19:06:49

+0

@DirkEddelbuettel,希望現在清楚了嗎? :)問候 – Roby 2014-08-27 20:24:06

+0

因爲R和Rcpp不知道'A'是什麼類,所以你必須相應地創建'as <>()'和'wrap()'。這通常不涉及XPtr。 – 2014-08-28 00:19:51

回答

1

您可以使用RCPP_EXPOSED_CLASS(A)爲您生成所有這些東西。詳情請參閱https://github.com/RcppCore/Rcpp/blob/master/inst/include/Rcpp/macros/module.h

#include <Rcpp.h> 
using namespace Rcpp ; 

RCPP_EXPOSED_CLASS(A) 

class A{ 
public: 

    A(){}  

    void concat(A & x){ 
     Rprintf("hello\n") ; 
    } 
} ; 

RCPP_MODULE(Foo){ 
    using namespace Rcpp; 

    class_<A>("A") 
     .default_constructor() 
     .method("concat", &A::concat) 
    ; 
} 

其中給出:

> sourceCpp("/tmp/mod.cpp") 
> 
> a <- new(A) 
> b <- new(A) 
> a$concat(b) 
hello