boost::chrono::时间点类型的序列化不起作用
serialization of type boost::chrono::timepoint does not work
我试图序列化成员类型的结构体boost::chrono::time_point tp,但给出错误序列化不是boost::chrono::time_point的成员,下面是我的代码:
struct myTimestamp
{
boost::chrono::time_point<boost::chrono::high_resolution_clock> begin1;
boost::chrono::time_point<boost::chrono::high_resolution_clock> end1;
private:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive &ar, const unsigned int version)
{
ar & begin1;
ar & end1;
}
public:
myTimestamp();
virtual ~myTimestamp();
};
我已经包含了所有必需的头文件,但问题仍然相同。
我甚至在序列化方法中尝试了下面的选项。还是同样的
基于"增大化现实"技术,序列化boost:::: make_binary_object(和begin1, sizeof (begin1));基于"增大化现实"技术,序列化boost:::: make_binary_object(和end1, sizeof (end1));
好了,下面是评论所暗示的:
using hr_clock = boost::chrono::high_resolution_clock;
using time_point = boost::chrono::time_point<hr_clock>;
namespace boost { namespace archive {
template<class Archive, typename clock>
void load(Archive& ar, boost::chrono::time_point<clock>& tp, unsigned)
{
using namespace boost::chrono;
milliseconds::rep millis;
ar & millis;
tp = time_point<clock>(milliseconds(millis));
}
template<class Archive, typename clock>
void save(Archive& ar, boost::chrono::time_point<clock> const& tp, unsigned)
{
using namespace boost::chrono;
milliseconds::rep millis = duration_cast<milliseconds>(tp.time_since_epoch()).count();
ar & millis;
}
} }
注意
- 我使它在其他时钟中也能正常工作。
- time_point似乎只考虑从一天开始的毫秒数(这可能是你所期望的,但我发现
since_epoch
这个名字在这方面令人困惑)
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/serialization/serialization.hpp>
#include <boost/serialization/split_free.hpp>
#include <boost/chrono.hpp>
using hr_clock = boost::chrono::high_resolution_clock;
using time_point = boost::chrono::time_point<hr_clock>;
namespace boost { namespace archive {
template<class Archive, typename clock>
void load(Archive& ar, boost::chrono::time_point<clock>& tp, unsigned)
{
using namespace boost::chrono;
milliseconds::rep millis;
ar & millis;
tp = time_point<clock>(milliseconds(millis));
}
template<class Archive, typename clock>
void save(Archive& ar, boost::chrono::time_point<clock> const& tp, unsigned)
{
using namespace boost::chrono;
milliseconds::rep millis = duration_cast<milliseconds>(tp.time_since_epoch()).count();
ar & millis;
}
template<class Archive, typename clock>
inline void serialize(Archive & ar, boost::chrono::time_point<clock>& tp, unsigned version)
{
boost::serialization::split_free(ar, tp, version);
}
} }
struct myTimestamp
{
time_point begin1;
time_point end1;
private:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive &ar, unsigned)
{
ar & begin1;
ar & end1;
}
public:
myTimestamp()
: begin1(hr_clock::now()),
end1(hr_clock::now() + boost::chrono::hours(1))
{ }
virtual ~myTimestamp() { }
};
#include <sstream>
int main()
{
std::stringstream ss;
{
myTimestamp ts;
boost::archive::text_oarchive oa(ss);
oa << ts;
}
{
myTimestamp ts;
boost::archive::text_iarchive ia(ss);
ia >> ts;
boost::archive::text_oarchive oa(std::cout);
oa << ts;
}
}
相关文章:
- 为什么 zlib 放气初始化调用一次不起作用?
- 内部结构初始化不起作用 - C++
- 为什么显式模板实例化不起作用
- 函数模板中的显式模板专用化不起作用
- 为什么显式模板实例化不起作用?
- 完整的模板专用化不起作用:没有与指定类型匹配的函数模板"mysort2"实例 STLests
- 使用初始化列表的 POD 类型初始化不起作用
- 使用 fwrite/fread 对矩阵进行二进制(反)序列化不起作用
- POD变量的直接初始化不起作用,但当将变量推到向量上时,复制初始化起作用
- 函数专用化不起作用
- 方法的简单专用化不起作用(C++)
- GCC 4.8.1 中的C++11:复制构造函数的列表初始化不起作用
- 模板部分专用化不起作用
- 为什么这种初始化不起作用
- 提升二进制序列化偶尔不起作用。解析的数据有时会损坏
- 当比较sizeof(type) == constant时,c++模板特化不起作用
- boost::chrono::时间点类型的序列化不起作用
- std::list类型可变变量的boost序列化不起作用
- 嵌套结构的boost序列化不起作用
- 初始化不起作用