Я использую функцию из библиотеки C. Он записывает в данные и возвращает размер, который был написан.
Код: Выделить всё
size_t uart_receive(uint8_t *data, size_t max_len);
Я хочу использовать объекты C ++, такие как std :: inplace_vector , но лучший метод, который я нашел,-это изменить размер вектора, прежде чем записать на него
Код: Выделить всё
template
void uart_receive_cpp(std::inplace_vector &rx_data) {
rx_data.resize(N); // adds padding to rx_data (extra writes)
size_t received_size = uart_receive(rx_data.data(), N);
rx_data.resize(received_size);
}
Потому что .resize () взимает складывание, я должен увеличить его, прежде чем подгонять его в размере, что также вызывает дополнительные записи. Что-то вроде: < /p>
Код: Выделить всё
template
void uart_receive_cpp(std::inplace_vector &rx_data) {
size_t received_size = uart_receive(rx_data.data(), N);
rx_data.resize_no_padding(received_size);
}
или есть лучший способ получить данные из uart_receive () в предварительно выделенный массив/вектор в стиле CPP без дополнительных записей? Я все еще хочу использовать функцию .size () , чтобы отразить фактическое количество полученных байтов.
Подробнее здесь:
https://stackoverflow.com/questions/795 ... t-overhead