2012-10-12 20 views
5

Ich versuche, Eigens Matrix zu serialisieren. Damit kann ich ein komplexeres Objekt serialisieren. Ich verwende Matrix als Basisklasse und schließe die Serialisierung in die abgeleitete Klasse ein. Ich bin verwirrt, wie man Matrix.data() anspricht, die ein c-artiges Array zurückgibt (wenn ich richtig bin). Dies ist mein Versuch:serialisieren Eigen Matrix mit boost.serialization

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

template < class TEigenMatrix> 
class VariableType : public TEigenMatrix { 
private: 
    friend class boost::serialization::access; 
    template<class Archive> 
    void serialize(Archive & ar, const unsigned int version) 
    { 
     ar & this.data(); 
    } 
public: 
}; 

Ich mag würde es als "Wrapper" verwenden:

VariableType<Matrix<double,3,1>> serializableVector; 

anstelle von

Matrix<double,3,1> vector; 
+0

für die Serialisierung, benutzte ich http://www.boost.org/doc/libs/1_51_0/libs/serialization/doc/index.html –

Antwort

8

Indem Sie die folgende kostenlose Funktion in Ihre Englisch: www.openbsd.dk/faq/pf//queueing.html Sie machen Boost.Serialization effektiv auf das Serialisieren von Eigen - Typen aufmerksam:

namespace boost 
{ 
    template<class Archive, typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols> 
    inline void serialize(
     Archive & ar, 
     Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> & t, 
     const unsigned int file_version 
    ) 
    { 
     for(size_t i=0; i<t.size(); i++) 
      ar & t.data()[i]; 
    } 
} 

Im Beispiel ihr habt, sollten Sie dann in der Lage sein zu tun (nicht getestet):

void serialize(Archive & ar, const unsigned int version) 
{ 
    ar & *this; 
} 

Werfen Sie einen Blick auf meine previous answer auf Serialisierung von Eigen-Typen Boost.Serialization für eine detailliertere Beispiel.

+1

Wäre es nicht sinnvoll, die Serialisierung für 'Eigen :: DichteBase' zu ​​schreiben? Ich denke, auf diese Weise könnte man auch 'Eigen :: Array' mit dem gleichen Code serialisieren, siehe: http://eigen.tuxfamily.org/dox/TopicFunctionTakingEigenTypes.html –

Verwandte Themen