2017-02-12 4 views
0

Можно ли сериализовать std::chrono::duration или особенно std::chrono::milliseconds с boost::serialization? произошлоКак сериализовать std :: chrono :: duration с Boost?

следующая ошибка:

"структура станд :: хроно :: длительность> 'не имеет ни одного члена с именем' сериализации"

Мне это нужно для моего шаблона класса:

#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; 

ответ

0

Допустим, у вас есть:

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); 
Смежные вопросы