boost::serialization + enum class
От: real_sba http://cellwar.xyz/
Дата: 01.09.14 14:07
Оценка:
Добрый день, уважаемые коллеги!
#include <boost/archive/binary_oarchive.hpp>
#include <map>

int main(int argc, char** argv)
{
  enum class Type : uint8_t {
    A = 1,
    B = 2,
    C = 3,
  };

  std::map<Type, uint16_t> t1;
  t1.insert(std::make_pair(Type::A, 42));
  t1.insert(std::make_pair(Type::B, 42));
  t1.insert(std::make_pair(Type::C, 42));

  std::map<uint8_t, uint16_t> t2;
  t2.insert(std::make_pair(1, 43));
  t2.insert(std::make_pair(2, 43));
  t2.insert(std::make_pair(3, 43));

  {
    std::stringstream os;
    boost::archive::binary_oarchive oa(os);
    oa << t1;
    std::cout << os.str().length() << std::endl;
  }

  {
    std::stringstream os;
    boost::archive::binary_oarchive oa(os);
    oa << t2;
    std::cout << os.str().length() << std::endl;
  }

  return 0;
}
Вывод:
80
71
На сколько я понимаю, для контейнера t1 длина ключа 32 бита, вместо ожидаемых 8-ми. Почему так происходит и как добиться чтобы на битовом уровне длина ключа соответствовала используемому типу? Ведь sizeof(Type) == 1.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.