Указатели функций, как это звучит, являются указателями на функцию. Это переменные, которые содержат адрес функции. Указатели функций позволяют нам передавать функцию в качестве параметра другой функции.
Синтаксис
Указатель функции — это просто переменная, которая содержит адрес функции, и вот как мы ее объявляем.
return_type (*pointer_name)(parameter_list);
Синтаксис состоит из трех частей:
return_type
: функция, на которую мы указываем, возвращает этот тип данных. Например, если функция, которую мы хотим указать, возвращаетint
, то мы должны использоватьint
в качестве возвращаемого типа.(*pointer_name)
: Это просто указывает на то, что мы объявляем указатель с именемpointer_name
на функцию.parameter_list
: Параметры функции представлены в виде списка, разделенного запятыми. Например, если функция принимаетint
иstring
в качестве параметров, мы будем использоватьint, string
в качестве списка параметров.
Объявление функтора (указатель функции)
int (*func_ptr)(int, string);
Мы только что объявили указатель на функцию, также известный как функтор с именем func_ptr
, который указывает на функцию с двумя параметрами int, string
и возвращает целое число.
Теперь мы можем присвоить функтору адрес любого функтора с параметрами int, string
, используя оператор &
.
func_ptr = &my_function;
Если вы думаете, что это слишком сложно, есть альтернативный способ присвоить функции переменной.
auto func_ptr = &my_function;
Да, он использует автоматическое ключевое слово. Ключевое слово auto
обычно используется для автоматического определения типа переменной на основе ее инициализатора. Ключевое слово auto
также можно использовать для упрощения синтаксиса объявления функтора.
Вызов функтора
Чтобы вызвать функцию с помощью указателя, мы используем следующий синтаксис:
int result = (*func_ptr)(arg1, arg2); int result = func_ptr(arg1, arg2);
Это вызовет функцию, на которую указывает func_ptr
, с аргументами arg1
и arg2
, и сохранит результат в переменной result
.
В C++ указатели на функции имеют множество применений и являются эффективным инструментом для создания кода, который является одновременно гибким и пригодным для повторного использования.