2012-10-12 80 views
5

我試圖序列化Eigen的矩陣。這樣我可以序列化更復雜的對象。 我使用Matrix作爲基類,並在派生類中包含序列化。我很困惑如何解決Matrix.data(),它返回一個c樣式的數組(如果我是正確的)。 這是我的嘗試:使用boost.serialization序列化Eigen的矩陣

#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: 
}; 

我想用它作爲一個「包裝」:

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

代替

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

系列化,我用http://www.boost.org/doc/libs/1_51_0/libs/serialization/doc/index.html –

回答

8

通過將以下免費功能到您的編譯單元,您可以有效地使Boost.Serialization意識到如何序列化特徵類型:

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

在你給的例子,你應該再能夠做到(未經測試):

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

對使用​​Boost.Serialization一個更詳細的例子徵類型的序列來看看我的previous answer

+1

編寫「Eigen :: DenseBase」的序列化是否合理?我想這樣也可以用相同的代碼序列化'Eigen :: Array',參見:http://eigen.tuxfamily.org/dox/TopicFunctionTakingEigenTypes.html –