Мы написали класс 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.