2012-10-12 114 views
5

Estoy tratando de serializar la matriz de Eigen. Para que pueda serializar un objeto más complejo. Estoy usando Matrix como una clase base e incluyo la serialización en la clase derivada. Estoy confundido sobre cómo abordar Matrix.data(), que devuelve una matriz c-style (si estoy en lo cierto). Este es mi intento:serialización de Eigen's Matrix usando 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: 
}; 

me gustaría utilizarlo como un "contenedor":

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

en lugar de

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

para la serialización, solía http://www.boost.org/doc/libs/1_51_0/libs/serialization/doc/index.html –

Respuesta

8

Al colocar la siguiente función gratuita en su unidad de compilación, efectivamente hace que Boost.Serialization sepa cómo serializar los tipos de Eigen:

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]; 
    } 
} 

En el ejemplo que dio, a continuación, debería ser capaz de hacer (no probado):

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

Tener un vistazo a mi previous answer en la serialización de tipos Eigen utilizando Boost.Serialization para un ejemplo más detallado.

+1

¿No tendría sentido escribir la serialización para 'Eigen :: DenseBase'? Creo que de esta manera también se podría serializar 'Eigen :: Array' con el mismo código, ver: http://eigen.tuxfamily.org/dox/TopicFunctionTakingEigenTypes.html –