忘了.C
。那很笨重。也许在 Rcpp 之前使用.C
over.Call
或有意义。.External
但是现在有了我们投入的工作Rcpp
,我真的看不出再使用的意义.C
了。只需使用.Call
.
更好的是,使用属性 (sourceCpp
和compileAttributes
),您甚至不必再看到.Call
它,感觉就像您正在使用 c++ 函数。
现在,如果我想做一些保留状态的事情,我会使用模块。例如,您的应用程序就是此类Test
。它有方法do_something
,do_something_else
并且计算使用这些方法的次数:
#include <Rcpp.h>
using namespace Rcpp ;
class Test {
public:
Test(): count(0){}
void do_something(){
// do whatever
count++ ;
}
void do_something_else(){
// do whatever
count++ ;
}
int get_count(){
return count ;
}
private:
int count ;
} ;
到目前为止,这是非常标准的 C++。现在,为了让 R 可以使用它,您创建一个像这样的模块:
RCPP_MODULE(test){
class_<Test>( "Test" )
.constructor()
.method( "do_something", &Test::do_something )
.method( "do_something_else", &Test::do_something_else )
.property( "count", &Test::get_count )
;
}
然后你可以使用它:
app <- new( Test )
app$count
app$do_something()
app$do_something()
app$do_something_else()
app$count