Предположим, я хочу обернуть некоторый код C или C ++, который содержит массивы или векторы, которые не могут быть автоматически отображены на R-типы с помощью Rcpp, но которые мне нужно передать функциям C / C ++, которые будут выводить действительные объекты R.Например:
typedef union {
size_t val_sizet;
long double val_longdbl;
} weird_struct
std::vector<weird_struct> an_unmappable_obj;
an_unmappable_obj.resize(2);
an_unmappable_obj[0].val_sizet = 1e20;
an_unmappable_obj[1].val_longdbl = 1.5 * 1e20;
Поскольку это вектор типа, который не может быть преобразован ни в один из собственных типов R, мне интересно, как я могу вернуть и обработать эти объекты внутри R / Rcpp таким образомспособ, которым вектор (или массив C, содержащий те же значения) может быть сериализован через saveRDS
, а его значения восстановлены после readRDS
.
Я думаю, один из способов сделать это будет через memcpy
'ingсодержимое объекта в некоторый вектор C ++ типа, который можно преобразовать в 'NumericVector' Rcpp или аналогичный, а затем принудительно привести его первый элемент к массиву требуемых типов C, когда его нужно использовать, но яинтересно, есть ли лучшее решение.