Добрый день, уважаемые коллеги!
#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.