我使用boost::serialization主要是用在软件的工程管理中,在工程管理中版本兼容是很重要的,比如要保证一个比较旧的工程在最新版的软件里仍然可以被导入。
boost中可以使用BOOST_CLASS_VERSION这个宏为某个结构体(类)标记版本号(版本号最大是256)。但在使用时发现这个宏有一个局限,就是不能为泛型结构体(类)标记。比如有以下支持序列化的结构体:
template< typename T >
struct PointEx
{
float X;
float Y;
T flag;
template< typename Archive >
void serialize( Archive &ar, const unsigned int version )
{
ar & BOOST_SERIALIZATION_NVP( X );
ar & BOOST_SERIALIZATION_NVP( Y );
ar & serialization::make_nvp( "flag", flag );
}
};
BOOST_CLASS_VERSION( PointEx, 13 );
这样会产生一个编译错误:
于是查看