Именованные параметры функции

smikler
smikler

Если у функции (метода) есть больше одного параметра с дефолтными настройками - дать возможность её вызывать с указанием только тех параметров, которые надо задать (остальные берутся по умолчанию).

Такая функциональность есть, например, в языке Python.

20
рейтинг
4 комментария
yndx-antoshkka
Мне нравится идея, но насколько я знаю, подобные предложения раньше отклонялись (я разведаю, по какой причине).


А не хотите попробовать расширить вашу идею? Посмотрите например на библиотеку Boost.Process klemens-morgenstern.github.io/process/boost_process/tutorial.html#boost_process.tutorial.io Для этой библиотеки неправильно будет выставлять неуказанные параметры в дефолтное значение. Необходим какой-то механизм, чтобы точно понимать, какие параметры были указаны, а какие - нет.
yndx-antoshkka
Anatoly Scheglov
Имя параметра - не часть сигнатуры. В разных файлах могут быть разные имена параметров.

В Python это фича полезна т.к. такие аргументы передаются как словарь.
Anatoly Scheglov
yndx-antoshkka
Я поискал прошлые обсуждения подобных предложений, и все они заканчивались плачевно. Слишком много проблем возникает, решение части этих проблем подымает новые проблемы и ломает пользовательский код. Против последнего подобного предложения проголосовали с ОЧЕНЬ большим перевесом.

Вот некоторые неразрешимые технические проблемы, которые возникают при добавлении именованных параметров функций:
* forward declarationы могут иметь имена параметров отличные от definition функции
* не работает с variadic template
* изменение имени параметра функции начнёт ломать пользовательский код
* это сильно усложнит и без того переусложнённое правило поиска верной перегрузки функции


Однако в обсуждениях именно говорили про параметры функций. Можно попробовать вместо этого написать proposal на инициализацию агрегатов с указанием имён полей:
point_2d_t{ int x; int y; };
point_3d_t : public point2d_t { int z; };

point_2d_t p1 {.x = 10, .y=42 };
point_3d_t p2 {.z = 777, .x = 10, .y=42 };
yndx-antoshkka
borisbn
> proposal на инициализацию агрегатов с указанием имён полей
Т.е. вернуть то, что выкинули из Си, когда делали Си++ ? ;)
borisbn
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).