Rcpp模块c ++对象终结器

时间:2012-07-18 23:25:27

标签: rcpp

为什么在指定对象终结器时,这个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 )    
    ;
 }

1 个答案:

答案 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中解决了这个问题。谢谢!