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()メソッドに分割することは避けたいと思います。
シリアル化の1つの次善の実装:
template <class Archive>
void serialize(Archive& ar, unsigned int version)
{
ar & num;
sqrt_num = -1.0;
}
これは逆シリアル化の場合を処理しますが、シリアル化の場合、キャッシュされた値は強制終了され、再計算する必要があります。
この場合のベストプラクティスは何ですか?