2016-10-01 45 views
2

如何序列化std :: chrono :: minutes与谷物或一般?如何序列化std :: chrono ::分钟

我想这

struct A { 
    std::chrono::minutes m; 

    template <class Archive> 
    void serialize(Archive& ar) { 
     ar(m); 
    } 
}; 
int main()  
{ 
     A a; 

     std::ostringstream os; 
     cereal::JSONOutputArchive ar1(os); 
     ar1(cereal::make_nvp("A", a)); 

     A result; 
     std::istringstream is(os.str()); 
     cereal::JSONInputArchive ar2(is); 
     ar2(cereal::make_nvp("A", result)); 

     if (a.m != result.m) 
      std::cout << "error\n"; 
} 

但在Visual Studio 2015年

1> Types must either have a serialize function, load/save pair, or load_minimal/save_minimal pair (you may not mix these). 
1> Serialize functions generally have the following signature: 
1> 
1> template<class Archive> 
1>  void serialize(Archive & ar) 
1>  { 
1>  ar(member1, member2, member3); 
1>  } 
1> 
1> 
1> cereal.hpp(702): note: see reference to function template instantiation 'ArchiveType &cereal::InputArchive<ArchiveType,0>::processImpl<std::chrono::minutes,0>(const T &)' being compiled 
1>   with 
1>   [ 
1>    ArchiveType=cereal::JSONInputArchive, 
1>    T=std::chrono::minutes 
1>   ] 

理想我婉序列化和便携的方式反序列化得到一个错误。

我想我通过包括谷物/类型/ chrono.hpp 并改变

#include <cereal/types/chrono.hpp> 
class A { 
    std::chrono::minutes m; 

    friend class cereal::access; 

    template <class Archive> 
    void serialize(Archive& ar) 
    { 
     ar(m); 
    } 
}; 

回答

1

解决了这个问题,因为你发现,支持std::chrono::minute,这是一个真正的std::chrono::duration,可以通过包括cereal/types/chrono.hpp发现,其中包括谷物。

相关问题