Заполнение зОго :: вектор исходных данных

Обновить

April 2019

Просмотры

54 раз

0

Мне нужно, чтобы заполнить вектор с исходными данными, иногда 2 байта, иногда 8 ... Я закончил с этой шаблонной функцией:

template <typename T>
void fillVector(std::vector<uint8_t>& dest, T t)
{
    auto ptr = reinterpret_cast<uint8_t*>(&t);
    dest.insert(dest.end(),ptr,ptr+sizeof(t));
}

с этим я могу заполнить вектор вроде этого:

fillVector<uint32_t>(dst,32bitdata);
fillVector<uint16_t>(dst,16bitdata);

Мне было интересно, если что-то еще подобное уже существует в стандартной библиотеке, может быть, я просто изобретал колесо

1 ответы

0

No, there's nothing in the standard library to achieve what you are after. So your solution is pretty much what you can currently go with (assuming your goal is to do some form of serialization).

The only point of improvement is that you are assuming uint8_t is a type that may be used to alias an object and inspect its bytes. That need not be the case. The only such types in C++11 are char and unsigned char. While uint8_t usually aliases the later in most modern architectures, that's not a hard requirement, it could alias a platform specific 8 bit unsigned integer type (the merits of that are outside the scope of this question). So to be standard conforming, either guard against it:

static_assert(std::is_same<unsigned char, std::uint8_t>::value, "Oops!");

Or us your own alias for valid "byte" type

namespace myapp { using byte = unsigned char; }

and deal in std::vector<myapp::byte>.