#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. Обычный способ выразить это — принять ответ.