Теперь Кью работает в режиме чтения

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

Как наиболее правильно оформить заголовок функции в C++?

У меня есть функция, которая выглядит так:
"Int create(string inp_1, string inp_2, string inp_3, double inp_4, double inp_5, double inp_6, double inp_7, double inp_8, string inp_9) {}". Эта функция содержит очень много входных переменных. При прочтении кода программы очень неудобно читать функции с таким количеством параметров. Как наиболее правильно оформить функции с таким количеством параметров? Какие есть негласные соглашения по способам оформления подобных функций среди профессиональных программистов для более простого чтения кода программы?
ПрограммированиеC++Программирование на c++
Иван Кузнецов
  · 230
Программист, фотограф и террариумист  · 24 мар 2022
Если для решения какойто задачи нужно передавать много параметров - очень удобно завернуть все эти параметры в одну структуру и передавать ее по ссылке или указателю. Кроме читаемости такой подход дает еще несколько преимещество:
  1. Если функция получаестя сложной (а это почти всегда будет с большим набором данных для обработки) - гораздо проще создать еще одну функцию, что примнимает такойже набор данных.
  2. Если идет обработка большого количества данных - можно заполнить те поля что не модифицируются и модифицировать только то что надо. Это может дать прирост к производительности
  3. В моей практике часто возникала ситуация когда в итоге эта структура с данными получала несколько конструторов для удобного заполнения
  4. Добавление/удаление параметра не требует изменения заголовка функции и всех зависимых от нее.
Из недостатков - передача параметра в структуре отъедает память в стеке и доступ к данным медленне.
З.Ы. Зачастую в такой ситуации у меня получается структура в которой кроме данных есть и метод что с этими данными и работает...
З.З.Ы. Примеры как передавать кучу параметров можете посмотреть в 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()
    };
Программист-любитель  · 22 мар 2022
Во-первых – стоит давать аргументам функции осмысленные имена вместо безликих inp_N. Во-вторых – можно попробовать собрать аргументы в одну, или несколько структур, и передавать в функцию уже эту структуру(ы), заполняя её(их) до функции. Например, представим, что у нас есть функция добавления нового автомобиля (неважно куда, просто есть): void AddCar(string modelName... Читать далее
1 эксперт согласен