Если для решения какойто задачи нужно передавать много параметров - очень удобно завернуть все эти параметры в одну структуру и передавать ее по ссылке или указателю. Кроме читаемости такой подход дает еще несколько преимещество:
- Если функция получаестя сложной (а это почти всегда будет с большим набором данных для обработки) - гораздо проще создать еще одну функцию, что примнимает такойже набор данных.
- Если идет обработка большого количества данных - можно заполнить те поля что не модифицируются и модифицировать только то что надо. Это может дать прирост к производительности
- В моей практике часто возникала ситуация когда в итоге эта структура с данными получала несколько конструторов для удобного заполнения
- Добавление/удаление параметра не требует изменения заголовка функции и всех зависимых от нее.
Из недостатков - передача параметра в структуре отъедает память в стеке и доступ к данным медленне.
З.Ы. Зачастую в такой ситуации у меня получается структура в которой кроме данных есть и метод что с этими данными и работает...
З.З.Ы. Примеры как передавать кучу параметров можете посмотреть в Vulkan API. Очень часто для инициализации таких стрктур можно юзать плюшки из новых стандартов выглядит это примерно так:
struct xz_buf stream = {
.in = (uint8_t *)buffer,
.in_pos = 0,
.in_size = size,
.out = (uint8_t *)_buffer->getBuffer(),
.out_pos = 0,
.out_size = _buffer->getSize()
};