Передать функцию в другую функцию
Попробуйте воспользоваться делегатами. Если вкратце — это как раз объект, содержащий в себе ссылку на метод. Примерно так будет выглядеть код в Вашем случае:
![]()
Определить свой делегат
Либо, воспользоваться предопределенным делегатом Func<TResult>
Более подробно о Func<TResult> можно почитать здесь
![]()
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.3.11.43304
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Как передать функцию в качестве параметра в C?
Я хочу создать функцию, которая выполняет функцию, переданную параметром для набора данных. Как передать функцию в качестве параметра в C?
Если вы используете функции / массивы в качестве переменных, ВСЕГДА используйте typedef . — Mooing Duck
Имя функции должно быть понтером к функции. Большинство людей, изучающих C, рано или поздно покрывают qsort, что именно это делает? — mckenzm
@MooingDuck Я не согласен с вашим предложением, и в вашем предложении нет аргументов в пользу вывода. Я лично предпочитаю никогда использование typedef для указателей функций, и я думаю, что это делает код более понятным и легким для чтения. — andrewrk
@andrewrk: Ты предпочитаешь void funcA(void(*funcB)(int)) и void (*funcA())() в typedef void funcB(); void funcA(funcB) и funcB funcA() ? Я не вижу положительных моментов. — Mooing Duck
8 ответы
Декларация
Прототип функции, которая принимает параметр функции, выглядит следующим образом:
Это означает, что параметр f будет указателем на функцию, имеющую void возвращаемый тип и который принимает один int параметр. Следующая функция ( print ) — это пример функции, которую можно передать в func в качестве параметра, потому что это правильный тип:
Вызов функции
При вызове функции с параметром функции переданное значение должно быть указателем на функцию. Используйте для этого имя функции (без скобок):
назвал бы func , передав ему функцию печати.
Тело функции
Как и любой параметр, func теперь можно использовать имя параметра в теле функции для доступа к значению параметра. Скажем так func применит переданную функцию к числам 0-4. Сначала рассмотрим, как будет выглядеть цикл при прямом вызове print:
С func в объявлении параметра говорится, что f — это имя указателя на желаемую функцию, напомним сначала, что если f это указатель, тогда *f это то, что f указывает на (т.е. функцию print в таком случае). В результате просто замените каждое вхождение print в приведенном выше цикле на *f :
Как передать функцию в функцию c
Указатель на функцию может передаваться в другую функцию в качестве параметра. Например:
В данном случае первый параметр функции operation — int (*op)(int, int) — представляет указатель на функцию, которая возвращает значение типа int и принимает два параметра типа int . Результатом функции является вызов той функции, на которую указывает указатель.
Определению указателя соответствуют две функции: add и subtract, поэтому их адрес можно передать в вызов функции operation: operation(add, a, b); .
Результат работы программы:
Другой пример — функция, которая может принимать в качестве параметра некоторое условие:
Первый параметр функции action — указатель int (*condition)(int) представляет функцию, которая принимает целое число и в зависимости от того, соответствует оно условию или нет, возвращает 1 (если соответствует) или 0. На момент определения функции action точное условие может быть неизвестно.
В текущей программе условия представлены двумя функциями. Функция isEven() возвращает 1, если число четное, и 0, если число нечетное. А функция isPositive() возвращает 1, если число положительное, и 0, если отрицательное.
При вызове функции action() в нее можно передать нужное условие: action(isEven, nums, n); . В итоге программа выведет на экран числа из массива nums, которые соответствуют переданному условию:
Передача функции в функцию
Передача функции в функцию в C++ осуществляется с помощью указателей на функцию.
Рассмотрим для начала пример.
В первую очередь нас интересует строка, где в функцию передаётся другая функция:
Здесь, в качестве параметра function выступает
Фактически, здесь используется так называемый указатель на функцию и подразумевается
Но вместо (*f) компилятор понимает и привычное f.
Аналогично, можно передавать в функции и другие функции с самыми разнообразными определениями.
В программе из примера в функцию передавались математические функции из файла math.h — sin, cos, exp, а также, функция, созданная пользователем — f1.