C и C ++ могут быть милыми. Если вы знаете, что делаете, у вас есть прямая линия очень к базовому оборудованию и абстракция более высокого уровня для эффективного рассуждения.
Я бы предложил упростить и уменьшить проблему. Начните с простого и известного случая, например, вектор STL double
. Давайте назовем это x
. Заполните его 10 или сотнями элементов, затем откройте FILE
и напишите блоб из
x.data(), x.size() * sizeof(double)
Закройте файл. Считайте его в R cpp, сначала выделив NumericVector v
того же размера, затем прочитав байты обратно и затем вызвав memcpy
в &(v[0])
.
Это должен быть тот же вектор.
Тогда вы можете обобщать на разные типы. Поскольку векторы гарантированно являются непрерывной памятью , вы можете напрямую использовать этот трюк сериализации.
Вы можете сделать это с помощью буферов символов, или void*
, или ... Ничего из этого не имеет значения до тех пор, пока вы будете осторожны, чтобы не ошибиться . Т.е. не передает int
полезную нагрузку на double
и т. Д.
Теперь, рекомендуется ли это ? Черт возьми, если вы не гоняетесь за производительностью и достаточно хорошо знаете, что делаете, и в этом случае это разумно. В противном случае положитесь на fantasti c существующих пакетов, таких как fst или qs , чтобы сделать это за вас.
Я надеюсь, что это поможет с вашим вопросом , Я не совсем что это вы спрашивали. Может быть, вы уточнить (и, возможно, сократить / сосредоточиться), если нет.