/ / Boost.Serialization:シリアル化プロセス中にクラスメソッドを呼び出す際のエラー - c ++、boost、boost-serialization

Boost.Serialization:シリアル化プロセス中にクラスメソッドを呼び出す際のエラー - c ++、boost、boost-serialization

私は、 "TestSerialize"クラスのメソッドをシリアル化プロセス中に呼び出そうとすると、以下の問題があります。

ここに私のコードです:

class TestSerialize
{
public:
std::string GetVal() { return Val + "abc"; }
void SetVal(std::string tVal) { Val = tVal.substr(0, 2); }

protected:

std::string Val;

friend class boost::serialization::access;
template<class Archive> void save(Archive & ar, const unsigned int version) const
{
using boost::serialization::make_nvp;
std::string tVal = GetVal(); // Error here
ar & make_nvp("SC", tVal);
}

template<class Archive> void load(Archive & ar, const unsigned int version)
{
using boost::serialization::make_nvp;
std::string tVal;
ar & make_nvp("SC", tVal);
SetVal(tVal);
}
BOOST_SERIALIZATION_SPLIT_MEMBER();
};

int main()
{
TestSerialize tS;

std::ofstream ofs("test.xml");
boost::archive::xml_oarchive oa(ofs, boost::archive::no_header);
oa << BOOST_SERIALIZATION_NVP(tS);
ofs.close();

return 0;
}

私が遭遇したエラーは: "TestSerialize :: GetVal": "this"ポインタを "const TestSerialize"から "TestSerialize"に変換できません。

このエラーは「保存」では発生しますが、「ロード」では発生しません

なぜ私はこのエラーが発生するのだろうか。 Boost.Serializationが私たちがこれらの2つの異なる振る舞いを持つようにすることを知りたいと思います。 Boost Library 1.47.0を使用しています

回答:

回答№1は2

save 〜です const 他の電話だけを呼び出すことができます const 機能。 GetVal それを変更しないでください:

std::string GetVal() const { ... }