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

Для этой темы необходимо знать, что такое указатель.

  • Указатель — это объект, который умеет хранить адреса
  • На любой объект можно создать указатель
  • В указатель можно присвоить адрес

Необходимо знать, что такое функции и параметры функций.

Можно написать много разных слов для каждой ситуации, но мне сейчас кажется, что лучше всего подойдёт набор примеров, который может послужить прекрасной фундаментальной базой для понимания столь непонятной ранее темы.

общий прицип объявления указателя:

  • ТИП_ФУНКЦИИ (*ИМЯ_УКАЗАТЕЛЯ)(ТИПЫ_ПАРАМЕТРОВ_ВНУТРИ_ФУНКЦИИ)

В этом примере показан принцип создания указателей на функции. Имя указателя берётся в скобки, за ними скобки параметров — такой принцип создания указателей на функции. Достаточно просто понять, читать гораздо сложнее.

  • Для понимания ниженаписанного требуется общее понимание шаблонов функций

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

  • Указатель на шаблон функции создать нельзя, но указатель на экземпляр функции создать можно

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

Вот пример для создания указателя на шаблонную функцию:

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

Вот еще пример, который просто дополнение к вышепоказанному. Так нагрузка для понимания, в моём видении, лучше.

В любом случае — главное принцип понять, остальное всё проще, чем может казаться.

Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

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

Ваш e-mail не будет опубликован.

Поиск

 
     

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

Яндекс.Метрика
НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

- Что ты пишешь? - спросили программиста. - Сейчас запустим - узнаем! - ответил программист.

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок