Boost logo

Boost Users :

Subject: Re: [Boost-users] Serialization of pointers ? --> loadingnotworking...
From: Simon Ruffieux (simon.ruffieux_at_[hidden])
Date: 2010-01-15 03:22:02


I should maybe have attached with the message this more reduced code
containing only the problematic classes.

This code fails as previously said during compilation because of the
"loadFromFileSens"

CODE

/*
 * SensorReading
 *
 */
class Sensor{
    public:
        Sensor(const std::string& name="");
        virtual ~Sensor();
        inline std::string getName() const {return m_name;}
        inline void setName(const std::string& name) {m_name=name;}

        friend class boost::serialization::access;
        template <class Archive> void serialize(Archive& ar, const unsigned
int version){
            ar & m_name;
        }
    protected:
        std::string m_name;
};
Sensor::Sensor(const std::string& name){
    m_name=name;
}
Sensor::~Sensor(){
}

class SensorReading{
    public:
        SensorReading(const Sensor* s=0, double time=0);
        virtual ~SensorReading();
        inline double getTime() const {return m_time;}
        inline void setTime(double t) {m_time=t;}
        inline const Sensor* getSensor() const {return m_sensor;}
        inline void print(){
            cout << "(" << m_time << "," << m_sensor->getName() << ")" <<
endl;
        }
        friend class boost::serialization::access;
        template <class Archive> void serialize(Archive& ar, const unsigned
int version){
            ar & m_time & m_sensor;
        }

    protected:
        double m_time;
        const Sensor* m_sensor;

};
SensorReading::SensorReading(const Sensor* s, double t){
    m_sensor=s;
    m_time=t;
}
SensorReading::~SensorReading(){}

template <class A> void saveIntoFileSens(SensorReading& sr, const char*
file){
        ofstream ofile(file);
        A ar(ofile);
        ar << sr;
        ofile.close();
}
template <class A> void loadFromFileSens(SensorReading& sr, const char*
file){
    ifstream ifile(file);
    A ar(ifile);
    ar >> sr;
    ifile.close();
}

/*
 * MAIN
 *
 */
int main(){

    Sensor s = Sensor("SensorNom");
    SensorReading senr = SensorReading(&s,67);

    saveIntoFileSens<text_oarchive>(senr, "out.txt");
    loadFromFileSens<text_iarchive>(senr, "out.txt");

    return 0;
}

----- Original Message -----
From: "Simon Ruffieux" <simon.ruffieux_at_[hidden]>
Newsgroups: gmane.comp.lib.boost.user
To: <boost-users_at_[hidden]>
Sent: Friday, January 15, 2010 9:04 AM
Subject: Re: Serialization of pointers ? --> loadingnotworking...

> Thanks for your quick answer !
>
> But the orientedPoints do work do work perfectly ! (Even without
> specifying the derived class)
>
> The problem is with the pointer to Sensor* contained in the SensorReading
> class .... And it seems to me this is not a derived class ....
>
> I'll keep trying ...
>
>
>
> ----- Original Message -----
> From: "Robert Ramey" <ramey_at_[hidden]>
> Newsgroups: gmane.comp.lib.boost.user
> To: <boost-users_at_[hidden]>
> Sent: Thursday, January 14, 2010 5:56 PM
> Subject: Re: Serialization of pointers ? --> loading notworking...
>
>
>> replace
>> friend class boost::serialization::access;
>> template <class Archive> void serialize(Archive& ar, const unsigned
>> int version){
>> ar & this->x & this->y & theta;
>> }
>>
>> with something like:
>> friend class boost::serialization::access;
>> template <class Archive> void serialize(Archive& ar, const unsigned
>> int version){
>> ar & boost::serialization::base_object<?>(*this);
>> }
>>
>> Look through the documentation and samples on how to serialize derived
>> classes.
>>
>> Robert Ramey


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net