【问题标题】:C++: serialize/de-serialize classes as follow:C++:序列化/反序列化类如下:
【发布时间】:2016-06-15 05:38:45
【问题描述】:
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();”。 但是我在编译时得到了这个“错误|'模板'(作为消歧器)只允许在模板中使用”。 如何序列化和反序列化这种类?

【问题讨论】:

  • 在您的情况下,T 是什么?如果T 是另一个类,你是否为它实现了serialize
  • @farcost T 可以是任何类,但我在这里设置为双倍

标签: c++ class templates serialization boost


【解决方案1】:

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

ar & boost::serialization::make_array(data, xinit)
   & ...;

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

【讨论】:

  • 完成了,非常感谢,但是我使用了另一种方法而不是序列化对象。
猜你喜欢
  • 2013-10-12
  • 1970-01-01
  • 2011-05-12
  • 1970-01-01
  • 1970-01-01
  • 2012-02-02
  • 2012-05-25
  • 2020-07-19
  • 1970-01-01
相关资源
最近更新 更多