2016-03-02 31 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

回答