【问题标题】:How to serialize std::chrono::duration with Boost?如何用Boost序列化std::chrono::duration?
【发布时间】:2017-02-12 10:07:47
【问题描述】:

是否可以用boost::serialization 序列化std::chrono::duration 或者尤其是std::chrono::milliseconds?

出现以下错误:

“struct std::chrono::duration >”没有名为“serialize”的成员

我的模板类需要这个:

#include <iostream>
#include <chrono>
#include <boost/serialization/serialization.hpp>

template<typename T>
class Field {
public:

// Default Constructor
Field() {}

Field(std::string name, T value) :
        mName(name), mValue(value) {}

~Field() {}

const std::string& getName() const {
    return mName;
}

T getValue() const {
    return mValue;
}

private:

friend class boost::serialization::access;
template<typename Archive>
void serialize(Archive& archive, const unsigned int) {
    archive & boost::serialization::make_nvp("Name", mName);
    archive & boost::serialization::make_nvp("Value", mValue);
}

std::string mName;
T mValue;
};

BOOST_CLASS_IMPLEMENTATION( Field<int>, boost::serialization::object_serializable )
BOOST_CLASS_IMPLEMENTATION( Field<std::chrono::milliseconds>, boost::serialization::object_serializable )

我正在创建以下对象:

Field<std::chrono::milliseconds> mSimTime;

【问题讨论】:

    标签: serialization boost duration boost-serialization chrono


    【解决方案1】:

    假设你有:

    auto earlier = std::chrono::system_clock::now();
    auto now = std::chrono::system_clock::now();
    auto aLotOfMilliseconds= std::chrono::duration_cast<std::chrono::milliseconds>(
            now - earlier);
    

    //这里序列化int64_t。

    那么在反序列化之后,你有:

    std::chrono::duration<int64_t, std::milli> duration(aLotOfMilliseconds);
    

    【讨论】:

      猜你喜欢
      • 2023-01-11
      • 1970-01-01
      • 2016-07-20
      • 2018-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-21
      • 1970-01-01
      相关资源
      最近更新 更多