2016-10-01 92 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發現,其中包括穀物。

相關問題