Added serializer/deserializer "cereal like" interface

Added interface BasicSerializer &operator()(T &&head, TArgs &&... tail) and BasicDeserializer &operator()(T &&head, TArgs &&... tail), which are cereal like intefaces so such format of serialization functions were possible:

template<class Archive>
void serialize(Archive & ar, DataType& d){
    ar(d.data1, d.data2....);
}
This commit is contained in:
Luli2020
2019-03-12 15:22:26 -07:00
committed by Mindaugas Vinkelis
parent c1ae593fb4
commit aca3139600
2 changed files with 16 additions and 0 deletions

View File

@@ -102,6 +102,15 @@ namespace bitsery {
archive(std::forward<TArgs>(tail)...);
}
template <typename T, typename... TArgs>
BasicDeserializer &operator()(T &&head, TArgs &&... tail) {
//serialize object
details::ArchiveFunction<BasicDeserializer, T>::invoke(*this, std::forward<T>(head));
//expand other elements
archive(std::forward<TArgs>(tail)...);
return *this;
}
/*
* value
*/

View File

@@ -100,6 +100,13 @@ namespace bitsery {
archive(std::forward<TArgs>(tail)...);
}
template <typename T, typename... TArgs>
BasicSerializer &operator()(T &&head, TArgs &&... tail) {
details::ArchiveFunction<BasicSerializer, T>::invoke(*this, std::forward<T>(head));
archive(std::forward<TArgs>(tail)...);
return *this;
}
/*
* value overloads
*/