2016-03-02 74 views
1
template<typename T> 
class MultidimArray: 
{ 
public: 
    T* data; 
    long int xinit; 
    ... 
private: 
    friend class boost::serialization::access; 
    template <class Archive> 
     void serialize(Archive &ar, const unsigned int version){ 
      ar & data; 
      ar & xinit; 
      ar & ...; 
    } 
}; 


stringstream ss; 
void serializateWs(){ 
    MultidimArray<DOUBLE> Mpack; 
    boost::archive::text_oarchive oa(ss); 
    oa << Mpack; 
} 

編譯錯誤:請求構件在「T」「序列化」,其是非類類型的「雙」。 但沒有「T * data」就沒問題。我找到了答案How to serialize derived template classes with Boost.serialize? 我添加了這一行「oa.template register_type < MultidimArray>();」。 但編譯時,我得到了這個「錯誤|'模板'(作爲消歧器)只允許在模板中」。 如何序列化和反序列化這種類?C++:序列化/反序列化類如下:

+0

T在你的情況是什麼?如果'T'是另一個類,你是否爲它實現了'serialize'? – farcost

+0

@farcost T可以是任何類,但是我將它設置爲這裏的一倍 – Raloy

回答