使用 boost::serialization,序列化包含可变成员中缓存的派生值的对象的“最佳”方法是什么?
class Example
{
public:
Example(float n) :
num(n),
sqrt_num(-1.0)
{}
// compute and cache sqrt on first read
float get_sqrt() const
{
if(sqrt_num < 0)
sqrt_num = sqrt(num);
return sqrt_num;
}
template <class Archive>
void serialize(Archive& ar, unsigned int version)
{ ... }
private:
float num;
mutable float sqrt_num;
};
出于维护原因,我想避免将 serialize() 拆分为单独的 save() 和 load() 方法。
序列化的一种次优实现:
template <class Archive>
void serialize(Archive& ar, unsigned int version)
{
ar & num;
sqrt_num = -1.0;
}
这处理了反序列化的情况,但是在序列化的情况下,缓存的值被杀死并且必须重新计算。
在这种情况下,最佳做法是什么?