0

オブジェクトに const& を返す func があります。言ってみましょう、

class Y {
    private:
        Id id;
    public:
        Id const& GetId() const;
}  

この Y オブジェクトは別のクラス、たとえばクラス X の一部であり、ブーストによってシリアル化する必要があります。

class X {
    template <class Archive>
    void serialize(Archive& ar, uint32 version)
     {
         ar & y->GetId();
     }
     Y y;
}

ただし、ブーストはこれについて不平を言い、エラーを出します:

error C2027: use of undefined type 'boost::STATIC_ASSERTION_FAILURE<x>'


C:\Users\Y.h(580) : see reference to function template instantiation 'Archive &boost::archive::detail::interface_iarchive<Archive>::operator &<const Id>(T &)' being compiled
            with
            [

Idをシリアル化するにはどうすればよいですか?

4

3 に答える 3

2

ブースト シリアル化の目的は、参照を使用してアーカイブにシリアル化することです。

問題は、CONST 参照ではなく参照として値を受け取ることです。

Id const& GetId() const; // Returns a const reference

以下を使用してみてください

Id & GetId(); 

そして、次のいずれか

ar & y.GetId();
ar << y.GetId();

カプセル化を破るのが気に入らない場合は、保護されたフレンドを使用するか、それを別の値にコピーして値を参照として渡します

Id copy = y.GetId();
ar & copy;
于 2013-08-22T17:22:33.030 に答える
0

問題に加えて->(@thomasを参照)2つ必要です:

Id const& GetId() const;
Id& GetId();

または、BOOST_SERIALIZATION_SPLIT_MEMBER 入出力を 2 つにします。

于 2013-08-22T17:26:25.173 に答える