据我所知,没有序列化(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作为这种专用类型的表示形式,其中包含你要序列化的确切类型.您需要一种识别反序列化的确切类型的方法(尽可能地将标识符分配给变体中的类型).