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