C ++:序列化/反序列化类如下:

时间:2016-03-02 11:32:53

标签: c++ class templates serialization boost

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'中的成员'serialize',这是非类型'double'。 但没有“T *数据”就没问题了。我找到了答案How to serialize derived template classes with Boost.serialize? 我添加了这行“oa.template register_type&lt; MultidimArray&gt;();”。 但我得到这个“错误|'模板'(作为消除歧义)只允许在模板中”编译时。 我如何序列化和反序列化这类课程?

1 个答案:

答案 0 :(得分:0)

使用数组包装器:http://www.boost.org/doc/libs/1_49_0/libs/serialization/doc/wrappers.html#arrays,例如像:

master = Tk()
entryb1 = StringVar

Label(master, text="Input: ").grid(row=0, sticky=W)

Entry(master, textvariable=entryb1).grid(row=1, column=1)

b1 = Button(master, text="continue", command=print_content)
b1.grid(row=2, column=1)

def print_content():
    global entryb1
    content = entryb1.get()
    print(content)

master.mainloop()

注册类型与事物无关,除非T是多态指针。