Указатель на функцию

Если говорить об указателях вкратце, то:

  • Указатель — это объект, который умеет хранить адреса.
  • На любой объект можно создать указатель.
  • В указатель можно присвоить адрес
Имя функции умеет неявно приводиться к указательной переменной. Поскольку имя функции может стать указателем, то в подходящий для функции указатель можно присвоить адрес функции.
Мне определённо кажется, что вместо кучи разных и непонятных слов к этой статье подойдёт небольшая подборка примеров кода.
Общий принцип построения указателя на функцию:
Тип_Функции (*Имя_Функции) (СПИСОК_ФОРМАЛЬНЫХ_ПАРАМЕТРОВ_ФУНКЦИИ)
Обязательно к имени функции приклеивать слева указательное обозначение и заворачивать это дело скобками.

Пример достаточно мал, поэтому его должно быть можно быстро понять. Важно только не забывать, что имя функции обозначается как указательная сущность и оборачивается скобками и что должно быть соответствие в параметрах.
Отдельного упоминания заслуживает указательная переменная, указывающая на экземпляр шаблонной функции.

  • Указатель на шаблон функции создать нельзя, но указатель на экземпляр функции создать можно.
Функции, которые объявлены как шаблонные, вроде и есть, а указатель на них создать нельзя. Нельзя создать указатель на шаблон функции по той простой причине, что шаблон функции являет собой целое семейство функций. Другими словами — шаблон функций обозначает множество разных функций сразу. Так как указатель в один момент времени может указывать только на один тип, да и вообще в С++ динамически типы изменять нельзя, то указать на шаблон функции нельзя. Но на представителя семейства указатель создавать можно.
Пример создания указателя на экземпляр шаблонной функции:

В показанном примере третий шаблонный параметр T3 в ходе работы программы принимает типы, не умеющие преобразовываться друг к другу. Поэтому его трудно будет задействовать. Конечно это решаемо, но эта статья об указателях на экземпляры шаблонных функций, поэтому не буду затрагивать другую тему. Позже вы к ней ещё придёте.
Задавая аргументы или явно (где необходимо задать всё явно), или неявно (если все параметры шаблона могут сами подставить в себя типы из приходящих в шаблон типов значений) в момент использования указательной переменной как функции — мы получаем возможность возложить обязанности работы функции на плечи указательной переменной. Единственное, нужно смотреть совместимость параметров, приписанных к указательной переменной, и параметров, живущих в экземпляре функции, с которой указатель связывается.
Тут важно понять сам принцип, остальное всё проще, чем может показаться на первый взгляд. И важно запомнить, что указательную переменную можно связать только с одним экземпляров шаблонной функции, а не со всем семейством, зарождаемым шаблонной функцией.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Поиск

 
     

Случайная книга в электронном формате

https://www.litres.ru/endru-tanenbaum/operacionnye-sistemy-razrabotka-i-realizaciya-15418253/?lfrom=15589587
Яндекс.Метрика