Я пишу пакет 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.
Задача ещё не решена.
Других решений пока нет …