RCPP_MODULE для класса наследования

#r #rcpp

#r #rcpp

Вопрос:

У меня возникла проблема, когда я попробовал модуль с классом наследования. В принципе, я не могу скомпилировать эту часть.

 RCPP_MODULE(PACE){
    using namespace Rcpp;
    class_<FPCAreg>("FPCAreg")
        .constructor<List, List, double, double, int, bool, bool>()
        .field("n", amp;FPCAreg::n)
            ;
}
 

Здесь FPCAreg — это класс наследования, основанный на классе FPCA, а «n» определяется в FPCA. Неважно, я использую «.field(«n», amp;FPCA::n)» или «.field («n», amp;FPCA::n)». Когда я использую «.field («n», amp;FPCA::n)», сообщение об ошибке выглядит так: «нет соответствующей функции для вызова blablabla», а для «.field («n», amp;FPCA::n)» это то же самое, но другое имя класса. Есть ли какие-либо предложения? Спасибо.

Комментарии:

1. Вы перепостили здесь И на rcpp-devel. Это дурной тон. Выбери одно или другое. Я ответил по списку. [И нет, я не голосовал против. ]

2. Я получил ответ. Спасибо.

Ответ №1:

Вы можете объявлять только поля и методы из фактического класса. Однако то, что вы можете сделать, это предоставить базовый класс и производный класс и указать на наследование между ними derives .

Вот один из примеров:

 #include <Rcpp.h>
using namespace Rcpp;

class Base {
public:
    Base(double x_) : x(x_){}
    double x; 
} ;

class Derived : public Base {
public:
    Derived(int y_) : Base(2.0), y(y_){} 
    int y ;
} ;

RCPP_MODULE(PACE){
    class_<Base>("Base")
        .constructor<double>()
        .field("x", amp;Base::x) 
    ;
    class_<Derived>("Derived")
        .derives<Base>("Base")
        .constructor<int>()
        .field("y", amp;Derived::y)
    ;
}
 

Затем я получаю это из R:

 > obj <- new(Derived, 10L)
> obj$y
[1] 10
> obj$x
[1] 2
 

Комментарии:

1. Обычный способ выразить это — принять ответ.