假如某段程序中我们只记录了一些虚基类指针对象,想把这些对象的完整信息(包括子类信息)序列化时,就需要用到boost的多态序列化技术。
很简单,只要修改两处地方就可以了:
(1)保证基类有一个虚函数(无所谓private、public);
(2)使用boost的宏BOOST_CLASS_EXPORT_GUID将子类export一下;
第二点需要特别注意下,有一个技巧,我们可能会习惯与在头文件定义子类的同时把BOOST_CLASS_VERSION和BOOST_CLASS_EXPORT_GUID这些宏也声明在头文件里,这是不可取的,会产生如下编译错误:
其实BOOST_CLASS_EXPORT_GUID这个宏也是定义了一堆泛型结构体,其中一个结构体(init_guid)有一个静态成员变量,就是说他重复定义了。解决方法是将这个宏放到一个cpp文件里(比如与子类头文件child.h相对应的child.cpp文件,这个思路也是在苟延残喘的google里搜到的,再次对封杀google表示强烈的谴责!)。
还需要注意一点,这个cpp文件必须要包含“