为什么在指定对象终结器时,这个Rcpp模块暴露c ++类不能编译?你能提供一个工作版吗?
class Exposed{
public:
Exposed(){
printf("constructor has been called\n");
}
private:
int some_field;
}
来自Rcpp Modules教程: class_的.finalizer成员函数可用于注册终结器。终结器是一个自由函数,它接受一个指向目标类的指针并返回void。在析构函数之前调用终结器,因此对目标类的有效对象进行操作。它可用于执行操作,释放资源等...当封装C ++对象的R对象被垃圾收集时,会自动调用终结器。
static void finalizer_of_exposed( Exposed* ptr ){
printf("finalizer has been called\n");
}
RCPP_MODULE(yada){
class_<Exposed>("exposed")
.constructor("")
.finalizer( &finalizer_of_exposed )
;
}
答案 0 :(得分:1)
您是否在没有void
的情况下将其作为static
函数进行了尝试?
编辑2012年7月21日:您发现了一个错误! Module.h的第720行需要更改:
Index: inst/include/Rcpp/Module.h
===================================================================
--- inst/include/Rcpp/Module.h (revision 3697)
+++ inst/include/Rcpp/Module.h (working copy)
@@ -717,7 +717,7 @@
private:
void SetFinalizer( finalizer_class* f ){
- if( class_pointer->finalizer_pointer ) delete class_pointer->finalizer ;
+ if( class_pointer->finalizer_pointer ) delete class_pointer->finalizer_pointer ;
class_pointer->finalizer_pointer = f ;
}
我刚刚在SVN中解决了这个问题。谢谢!