c++ - boost::serialization Archive::register_type 如何工作?

标签 c++ boost types polymorphism registration

boost::serialization 能够序列化它们最派生类的多态对象,即使这些对象由指向基类的引用/指针指向。这不需要虚函数。

要做到这一点,boost::serialization 需要知道存在的多态类型:Archive::register_type 必须在 Archive< 上调用 用于序列化的对象。

This example展示了如何注册类型以及如何序列化它们。


我想知道这是如何实现的。
我试图查看 boost::serialization 源代码但失败了:我不太擅长模板元编程。

最佳答案

boost.serialization 可以使用 typeid() 或一些返回实际类型的用户定义函数 get_key 写出您的多态类的多态对象。

register_type 通过使用提供的类型来实例化一个模板,该模板允许存档映射类型标识符(typeid(T) 的结果) T::get_key()) 到知道如何序列化 T 的对象。

关于c++ - boost::serialization Archive::register_type 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4335539/

相关文章:

c++ - C++ 库的 C 包装器,iostream 和 gcc 的问题

c++ - 使用具有不同编译器版本的 boost 库

c - 请帮忙传递多维数组

java - Long vs Integer,long vs int,什么时候使用?

c++ - 图标作为基础出现在窗口内的怪异图标

c++ - 在 C++ 中调用 struct 的构造函数时出现 undefined reference 链接错误

c++ - 使用共享指针访问单例子类时出现 SEGFAULT

c++ - boost::ptr_vector 构造函数

c++ - 使用模板和 boost 功能

c++ - 为什么这个模板函数可以成功编译?