RCPP - Потерян, как использовать Rcpp::XPtr, чтобы обернуть указатель

Я пишу пакет r, который использует 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 ответов

Другие вопросы по тегам