RCPP_MODULE用于继承类

时间:2014-06-19 23:42:28

标签: r rcpp

当我尝试使用继承类的模块时遇到了问题。基本上,我无法编译这部分。

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) )“,这是相同但不同的类名。有什么建议吗?感谢。

1 个答案:

答案 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