Rcpp公开类的序列化 我在一个R包中写了一个C++类,我用R代码> RCPPPa公开类< /COD>和 RCPPP1模块< /C> >

Rcpp公开类的序列化 我在一个R包中写了一个C++类,我用R代码> RCPPPa公开类< /COD>和 RCPPP1模块< /C> >,c++,r,serialization,rcpp,C++,R,Serialization,Rcpp,一切都很好: > index An object of class "Index" Slot "index": C++ object <0x9cd4810> of class 'DB' <0xfd66220> >索引 “索引”类的对象 插槽“索引”: 类“db”的C++对象 但是如果saveRDS(索引'DB.rds')它不会只保存地址而保存实际对象。反过来,当我在新会话中加载DB.rds时,它被判定为无效 是否可以编写一个自定义序列化方法,该方法可以透明地与s

一切都很好:

> index
An object of class "Index"
Slot "index":
C++ object <0x9cd4810> of class 'DB' <0xfd66220>
>索引
“索引”类的对象
插槽“索引”:
类“db”的C++对象
但是如果
saveRDS(索引'DB.rds')
它不会只保存地址而保存实际对象。反过来,当我在新会话中加载
DB.rds
时,它被判定为无效


是否可以编写一个自定义序列化方法,该方法可以透明地与saveRDS一起工作?“可能”。你有起始地址,你可以算出长度。我不知道你是否可以用这种方式重新实例化一个对象。这对位于堆中的数据不起作用。在我看来,我的最佳选择是编写自己的序列化函数,并将其作为向量存储在对象上。但这是不透明的。无论如何,您可能必须在R的内存池中。简短回答:我们已经说过,对于所有这些,这是不容易做到的。这可能仍然成立,但如果有足够的错误,您可能会。值得吗?不知道。取决于你的物体有多复杂,它可能不像你想象的那么难。一种方法是将所有类成员转换为等效的R数据类型,并将其作为R列表从Rcpp返回。是否可以在对象上定义一个钩子,以便通过
readRDS
saveRDS
调用进行转换?