Можно ли использовать экспортированный модуль r cpp в функции C ++ других пакетов в качестве аргумента - PullRequest
0 голосов
/ 19 февраля 2020

Мы написали класс C ++ в R-пакете, который мы экспортировали через RCPP_MODULE. Это работает красиво, и мы можем использовать функции классов в R. Теперь мы хотели бы написать в другом пакете функцию в C ++, которая принимает экземпляр ранее написанного класса в качестве аргумента. Мы хотели бы экспортировать эту функцию в R. Рабочий процесс в R, который мы намереваемся, следующий:

objA <- PackageA::ClassA$new()
result <- PackageB::doSomething(objA)

Реализация в пакете B следующая:

// [[Rcpp::depends(PackageA)]]
#include "ClassA.h"
RCPP_EXPOSED_CLASS(ClassA);

// [[Rcpp::export]]
void doSomething(ClassA* a){
  Rcpp::Rcout<<a->hello()<<std::endl;
}

Но код не компилируется:

error: cannot convert ‘SEXP {aka SEXPREC*}’ to ‘ClassA*’ in initialization
          Exporter( SEXP x ) : t(x){}

Решения, показанные здесь (с использованием R cpp :: XPtr) { ссылка } работают, но не соответствуют нашим потребностям. Поэтому нам было интересно, есть ли способ научить R cpp конвертировать объекты нашего класса A.

...