Скажем, у меня есть функция f(a, b, c)
. Можно ли создать указатели функций g
и h
, чтобы при использовании g
и h
они использовали заданное значение для одного из аргументов?Указатели функции C++ и аргументы предварительной настройки
Например, (*g)(b, c)
будет эквивалентен f(1, b, c)
и (*h)(b, c)
будет эквивалентом вызова f(2, b, c)
.
Причина, по которой я делаю это, заключается в том, что я вызываю функцию, к которой я могу получить указатель (через dlsym), и эта функция имеет совершенно другое поведение в зависимости от того, что является первым аргументом (настолько, что они должны На самом деле это одно и то же. Более того, переменная указателя функции, которая используется в основной программе, может принимать только два аргумента, поскольку это особый случай, когда импортированная функция имеет три (но на самом деле нужно только две, по сути, это параметр параметров).
Спасибо.
То, что вы хотите, называется currying. Посмотрите на этот вопрос: http://stackoverflow.com/questions/152005/how-can-currying-be-done-in-c – camh
@camh: Обратите внимание, что этот вопрос был задан довольно давно. Теперь ответы, указывающие на 'std :: bind' (из' boost :: bind', будут подавляющими. ':)' – sbi