Rcpp модуль с ++ финализатор объекта

Почему этот модуль Rcpp, представленный классом C++, не компилируется при указании финализатора объекта? Можете ли вы предоставить рабочую версию?

class Exposed{
     public:
        Exposed(){
          printf("constructor has been called\n");
        }

     private:
        int some_field;
}

из учебника по модулям Rcpp: функция-член.finalizer класса_ может использоваться для регистрации финализатора. Финализатор - это бесплатная функция, которая берет указатель на целевой класс и возвращает void. Финализатор вызывается перед деструктором и работает с допустимым объектом целевого класса. Его можно использовать для выполнения операций, освобождения ресурсов и т. Д. Финализатор вызывается автоматически, когда объект R, который инкапсулирует объект C++, подвергается сборке мусора.

 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 ответ

Решение

Вы пробовали это как void функция без static?

Редактировать 21-июл-2012: Вы нашли ошибку! В строке 720 файла Module.h необходимо изменить:

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. Спасибо!

Другие вопросы по тегам