Archive.h utility InputArchive.h InputArchive.h OutputArchive.h OutputArchive.h terse::Archive terse //CopyrightEpicGames,Inc.AllRightsReserved. #pragmaonce #ifdef_MSC_VER #pragmawarning(push) #pragmawarning(disable:43654987) #endif #include<utility> #ifdef_MSC_VER #pragmawarning(pop) #endif namespaceterse{ template<classArchiveImpl> classArchive{ public: explicitArchive(ArchiveImpl*impl_):impl{impl_},userData{nullptr}{ } boolisOk(){ returnimpl->isOk(); } voidsync(){ impl->sync(); } voidlabel(constchar*value){ impl->label(value); } template<typename...Args> voidoperator()(Args&&...args){ dispatch(std::forward<Args>(args)...); } template<classTSerializable> ArchiveImpl&operator<<(TSerializable&source){ dispatch(source); return*impl; } template<classTSerializable> ArchiveImpl&operator>>(TSerializable&dest){ dispatch(dest); return*impl; } void*getUserData()const{ returnuserData; } voidsetUserData(void*data){ userData=data; } protected: template<typenameHead> voiddispatch(Head&&head){ impl->process(std::forward<Head>(head)); } template<typenameHead,typename...Tail> voiddispatch(Head&&head,Tail&&...tail){ dispatch(std::forward<Head>(head)); dispatch(std::forward<Tail>(tail)...); } private: ArchiveImpl*impl; void*userData; }; }//namespaceterse