1

プリミティブへのポインターをシリアル化するためにブーストの機能を使用しようとしています (自分で逆参照して深いストアを行う必要がないように)。ただし、実行しようとするとエラーが山積みになります。ファイルからクラスの内容を読み書きするsaveおよびメソッドを含むクラスの簡単な例を次に示します。loadこのプログラムはコンパイルされません:

#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>

#include <boost/serialization/shared_ptr.hpp>
#include <boost/shared_ptr.hpp>

#include <fstream>

class A
{
public:
    boost::shared_ptr<int> sp;
    int const * p;

    int const& get() {return *p;}

    void A::Save(char * const filename);
    static A * const Load(char * const filename);

        //////////////////////////////////
        // Boost Serialization:
        //
    private:
        friend class boost::serialization::access;
        template<class Archive>
        void serialize(Archive & ar,const unsigned int file_version)
        {
            ar & p & v;
        }
};

// save the world to a file:
void A::Save(char * const filename)
{
    // create and open a character archive for output
    std::ofstream ofs(filename);

    // save data to archive
    {
        boost::archive::text_oarchive oa(ofs);

        // write the pointer to file
        oa << this;
    }
}

// load world from file
A * const A::Load(char * const filename)
{
    A * a;

    // create and open an archive for input
    std::ifstream ifs(filename);

    boost::archive::text_iarchive ia(ifs);

    // read class pointer from archive
    ia >> a;

    return a;
}

int main()
{

}

ポインターを逆参照するソリューションには興味がないことに注意してください。ブーストにそれを処理してもらいたいです (これらのクラスの多くは、同じ基本オブジェクトを指している可能性があります)。

4

1 に答える 1