Нет встроенного способа сделать это, но C ++ позволяет вам создавать абстракции для достижения ваших целей.Например,
void ethernet_frame(std::array<char, 19> raw_data)
{
struct ethernet
{
std::array<char, 6> dest_mac;
std::array<char, 6> src_mac;
};
ethernet e{slice<0, 7>(raw_data), slice<7, 14>(raw_data)};
}
Где slice
- это что-то вроде:
template <std::size_t Begin, std::size_t End, typename T>
auto slice(const T& range)
{
constexpr auto count = End - Begin - 1;
std::array<std::decay_t<decltype(*range.begin())>, count> result;
std::copy(range.begin() + Begin, range.begin() + End, result.begin());
return result;
}