Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как из функции с двумя параметрами селать функцию с один параметром, зафиксировав второй (чистый си).

Dudakudak Yar Ученик (130), на голосовании 3 месяца назад
Есть функция с двумя параметрами:
 int f(int x, int y); 
Хотелось бы воспринимать ее как функцию первого параметра x при фиксированном значении второго параметра (например, y= 5):
g(x) = f(x, 5).
чтобы мочь подставить ее в функцию вида:
 int Q(int (*g)(int)); 
Как создать такую функцию g при условиях:
-нельзя лезть внутрь функций f и Q,
-нельзя задавать y просто как переменную с голбальной видимостью
?
Дополнен 4 месяца назад
Плохо сформулировал вопрос... Тут участвует третья функция P, которая принимает указатель на функцию f(x, y) как параметр, затем она должна зафиксировать значение y = 5, и подставить функцию f(x, 5) как функцию одной переменной в функцию Q.
Голосование за лучший ответ
робот д24 Мудрец (19734) 4 месяца назад
Почему вот так просто не написать:
 int g(int x) 
{
return f(x, 5);
}
Николай МатвейчукПросветленный (45213) 4 месяца назад
+1 одинаково думаем xD
Dudakudak YarУченик (130) 4 месяца назад
Потому что тут нет возможности поменять 5 на что-то другое.
робот д24 Мудрец (19734) Dudakudak Yar, в теории можно создать функцию высшего порядка которая будет возвращать указатель на функцию g и принимать y. Но я не уверен, что в си это возможно реализовать
Николай Матвейчук Просветленный (45213) 4 месяца назад
Создать декоратор? функцию g(int), тело которой состоит из return f(int, 5)
Или это почему-то не подходит тоже?
Dudakudak YarУченик (130) 4 месяца назад
Это неподохдит. Внешняя функция должна взять функцию двух переменных, зафиксировать в ней один параметр, и подставить ее как функцию одной переменной в другую функцию.
Николай Матвейчук Просветленный (45213) Dudakudak Yar, а, Вам higher-order нужен. То есть функция, которая вернёт функцию. Дааа.... без замыканий тут будет сложно. Моего познания в C++ не хватает, чтобы Вам подсказать. Извините.
Nikassaiop End Просветленный (41592) 4 месяца назад
Нет компилятора под рукой, но вроде при таком объявлении
 int f(int x, int y = 5); 
должно игнорировать отсутствие второго параметра, выставляя его по умолчанию?
Dudakudak YarУченик (130) 4 месяца назад
Это не подохдит. Внешняя функция должна взять функцию двух переменных, зафиксировать в ней один параметр, и подставить ее как функцию одной переменной в другую функцию.
Похожие вопросы