C – boost ::任何序列化

据我所知,没有序列化(boost :: serialization,实际上)支持boost :: any占位符.

有人知道有没有办法序列化一个自定义boost ::任何实体?

这里的问题是显而易见的:boost :: any使用基于模板的占位符来存储对象和typeid来检查boost :: any_cast是否合适.

所以,有一个自定义的抽象超类占位符和自定义的基于模板的派生类,它们被创建如下:

template <T> custom_placeholder : public placeholder {
    virtual std::type_info type() const { return typeid(T); }
    virtual ...
};

显然,即使考虑序列化这个东西,也带来了一些麻烦.也许有人知道做这样的序列化(当然,正确的反序列化)的一些技巧?

谢谢

解决方法

至少对于任意类型,根本是不可能的.请注意,也许您可​​以使用一些棘手的代码序列化(如查找任何包含的元素的大小),但任何代码都依赖编译器静态地将任何type_code和正确的类型放在占位符中.您在C中的反序列化中肯定不能这样做,因为在编译时您将从反序列化中获得的类型在新版本的boost :: any中是不可见的.

最好的解决方案是为您要序列化的元素的确切类型构建一些专门的任何类型.然后,您可以为反序列化的实际类型的元素提供特殊情况,但请注意,每个元素类型的序列化/反序列化都必须以静态C代码形式写入.

PD.还有一些人建议使用boost :: variant作为这种专用类型的表示形式,其中包含你要序列化的确切类型.您需要一种识别反序列化的确切类型的方法(尽可能地将标识符分配给变体中的类型).

相关文章

/** C+⬑ * 默认成员函数 原来C++类中,有6个默认成员函数: 构造函数 析构函数 拷贝...
#pragma once // 1. 设计一个不能被拷贝的类/* 解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运...
C类型转换 C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译...
//异常的概念/*抛出异常后必须要捕获,否则终止程序(到最外层后会交给main管理,main的行为就是终止) try...
#pragma once /*Smart pointer 智能指针;灵巧指针 智能指针三大件//1.RAII//2.像指针一样使用//3.拷贝问...
目录&lt;future&gt;future模板类成员函数:promise类promise的使用例程:packaged_task模板类例程...