2017-02-12 4 views
0

std::chrono::duration、特にstd::chrono::millisecondsboost::serializationとシリアル化することはできますか?ブーストでstd :: chrono :: durationをシリアライズするには?

次のエラーが発生しました:

は私が私のテンプレートクラスのためにこれを必要とする "構造体のstd ::クロノ::期間が>シリアライズ 'という名前のメンバーを持っていません'"
#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); 
関連する問題