在没有包装器的情况下提升指向基元的指针的序列化

Posted

技术标签:

【中文标题】在没有包装器的情况下提升指向基元的指针的序列化【英文标题】:boost serialization of pointer to primitive without wrapper 【发布时间】:2014-01-08 18:45:36 【问题描述】:

有什么方法可以序列化指向原语的指针而不将其包装在类中?

我注意到对以下问题的评论,它需要在程序中跟踪该类型的所有原语,我猜这可能会减慢序列化速度。但如果我对此没意见怎么办?有没有办法为所有原始类型启用跟踪?

How do I serialize a class containing pointers to primitives?

我发现这个线程(从 2006 年开始)也暗示了这个问题。似乎应该可以序列化指向原语的指针,但是缺乏跟踪使它成为您可能不想要的东西。它似乎暗示了这种可能性,但没有解释它是否曾经实施过。

http://boost.2283326.n4.nabble.com/serialization-serialization-of-pointers-to-primitive-types-td2561086.html

【问题讨论】:

只需将它包装在一个类中......这是明智的做法。有什么反对意见? 这是一个复杂的场景。但它与创建使用 C++ 代码的 sn-ps 的 DSL 有关。我希望 DSL 的用户能够使用他们习惯的 C++ 类型。 我看不出 DSL 是如何相关的(除非我把图片颠倒了,并且你(ab)使用序列化来解析 DSL)。我假设类似基于 Proto 的 eDSL(表达式模板)?在这种情况下,没有什么能阻止你改变 ast。或者,如我所愿,使用 Boost Spirit Karma 编写序列化并绕过整个“问题” 这很好,我可以在生成代码的同时翻译类型。现在,我试图避免对 C++ 代码进行大量解析,并且在大多数情况下只是通过 sn-ps 而不进行修改。 【参考方案1】:

你可以为operator&写一个重载函数,像这样:

template<class Archive>
void operator&(Archive & ar, const char* &p)



【讨论】:

以上是关于在没有包装器的情况下提升指向基元的指针的序列化的主要内容,如果未能解决你的问题,请参考以下文章

如何提升::序列化指针和引用?

待解决---

将命名空间添加到元素并在没有别名的情况下进行序列化

序列化指向没有默认构造函数的类的指针时无法覆盖 save_construct_data

如何在没有 HTML 包装器的情况下保存 DOMDocument 的 HTML?

在 C++ 中使用指针和指向指针的指针读取和存储序列化对象的快速方法