我正在尝试理解 Boost 的序列化库(参见教程),并且非常喜欢序列化类的非侵入式方式,因为这意味着我可以将所有序列化代码放在单独的文件中:
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
class gps_position
{
public:
int degrees;
int minutes;
float seconds;
gps_position(){};
gps_position(int d, int m, float s) :
degrees(d), minutes(m), seconds(s)
{}
};
namespace boost {
namespace serialization {
template<class Archive>
void serialize(Archive & ar, gps_position & g, const unsigned int version)
{
ar & g.degrees;
ar & g.minutes;
ar & g.seconds;
}
} // namespace serialization
} // namespace boost
虽然此方法提供了一个函数“serialise”,可用于序列化“gps_position”类,但我不确定该类本身是否可序列化(即,在序列化/反序列化方面就像一个原语)一旦这个函数有已创建,或者如果我必须为此使用侵入性方法...
也就是说,如果我有另一个包含“gps_position”实例向量的类,当我尝试时,Boost 会知道在 Boost::serialization 命名空间中查找与“gps_position”参数匹配的重载“serialize”函数序列化父类?或者它只会显式地查找类的“序列化”方法(在这种情况下找不到)?
我在教程中找不到这个问题的答案,希望有使用这个库的经验的人能解释一下!
PS我不愿意“尝试一下”,因为我不知道失败应该是什么样子(Boost会序列化“某事”吗?)...