当我尝试使用继承类的模块时遇到了问题。基本上,我无法编译这部分。
RCPP_MODULE(PACE){
using namespace Rcpp;
class_<FPCAreg>("FPCAreg")
.constructor<List, List, double, double, int, bool, bool>()
.field("n", &FPCAreg::n)
;
}
这里FPCAreg是一个基于FPCA类的继承类,“n”在FPCA中定义。无论我使用“.field(”n“,&amp; FPCAreg :: n)”还是“.field(”n“,&amp; FPCA :: n)”。当我使用“.field(”n“,&amp; FPCAreg :: n)”时,错误信息是“没有用于调用blablabla的匹配函数”,以及“.field(”n“,&amp; FPCA :: n) )“,这是相同但不同的类名。有什么建议吗?感谢。
答案 0 :(得分:5)
您只能从实际类中声明字段和方法。但是,您可以做的是公开基类和派生类,并在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", &Base::x)
;
class_<Derived>("Derived")
.derives<Base>("Base")
.constructor<int>()
.field("y", &Derived::y)
;
}
然后我从R:
得到这个> obj <- new(Derived, 10L)
> obj$y
[1] 10
> obj$x
[1] 2