Par défaut dans Boost.Serialization, les types d'énumération sont sérialisés en tant qu'entier entier de 32 bits. Mais j'ai besoin de sérialiser certains types enum comme des entiers de largeur différente. J'ai essayé de spécialiser la méthode boost :: serialization :: serialize, mais il semble que cela ne fonctionne pas pour enums.Comment modifier la sérialisation d'enums par défaut dans Boost.Serialization
Voici ma tentative:
#include <iostream>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/asio.hpp>
enum MyEnum_t
{
HELLO, BYE
};
namespace boost
{
namespace serialization
{
template< class Archive >
void save(Archive & ar, const MyEnum_t & t, unsigned int version)
{
unsigned char c = (unsigned char) t;
ar & c;
}
template< class Archive >
void load(Archive & ar, MyEnum_t & t, unsigned int version)
{
unsigned char c;
ar & c;
t = (MyEnum_t) c;
}
} // namespace serialization
} // namespace boost
BOOST_SERIALIZATION_SPLIT_FREE(MyEnum_t)
int main(int argc, const char *argv[])
{
boost::asio::streambuf buf;
boost::archive::binary_oarchive pboa(buf);
buf.consume(buf.size()); // Ignore headers
MyEnum_t me = HELLO;
pboa << me;
std::cout << buf.size() << std::endl; // buf.size() = 4, but I want 1
return 0;
}
Pouvez-vous encapsuler l'énumération dans une classe et sérialiser la classe? – Dan
Je pense que cela ne fonctionne pas non plus. –