RCPP - 迷失了如何利用Rcpp :: XPtr来包装指针

时间:2018-03-28 16:07:04

标签: c++ rcpp rcpp11

我正在编写一个使用rcpp的包。

我在C ++中有以下类:

using namespace std;

typedef float ffm_float;
typedef double ffm_double;
typedef int ffm_int;
typedef long long ffm_long;

class ffm_model {
  public:
    ffm_int n; // number of features
    ffm_int m; // number of fields
    ffm_int k; // number of latent factors
    ffm_float *w = nullptr;
    bool normalization;
    ~ffm_model();
};

我编写了以下RCPP模块,以便将该类暴露给r:

RCPP_MODULE(ffmModelMod){
  using namespace Rcpp;

  class_<ffm_model>( "ffm_model")

    .field("n", &ffm_model::n)
    .field("m", &ffm_model::m)
    .field("k", &ffm_model::k)
    .field("*w", &ffm_model::*w)
    .field("normalization", &ffm_model::normalization)
    .method("~ffm_model",&ffm_model::~ffm_model)
    ;
}

当我尝试在R中安装软件包时,我遇到了问题,因为 ffm_float * w 不能直接转换为SEXP。从我在这里问过的上一个问题,我建议尝试使用XPtr来包装指针。但是,我在查找有用的文档方面遇到了很多麻烦,而且我甚至不知道从哪里开始。

为了解决这个问题,我写了以下前瞻性声明,但我不知道我是否朝着正确的方向前进。

namespace Rcpp {

    namespace traits{

        // Support for wrap
        template <typename T> SEXP wrap(const ffm_model<T>&);

        // Support for as<T>
        template <typename T> class Exporter< ffm_model<T> >;

    }
}

有人可以指出我正确的方向吗?我已经阅读了RCPP扩展小插图。

0 个答案:

没有答案