Здравствуйте, Анатолий Широков, Вы писали:
АШ>Любая функция подчиняется той или иной договоренности о вызове, которая специфицируется в типе, поэтому почему Вы решили выделить функцию обратного вызова в особый класс в языке мне не совсем понятно? Я согласен с тем, что стандарт не регулирует такие вопросы, как порядок размещения параметров с стеке и т.п., но это всего лишь аспект реализации, который все равно не делает этот класс функций чем-то особенным, имхо.
Имхо, ты сперва заговорил о логическом понятии, а потом перескочил на сишные неинлайновые функции.
Особенность callback-функций как элемента проектирования — в том, что к ним предъявляются внешние ограничения.
Во-первых, синтаксические (клиент должен соблюсти конвенции вызова).
Во-вторых, поведенческие (клиент может не знать ни о моментах, ни о количестве вызовов функции; возможны дополнительные ограничения по реентерабельности, многопоточности и т.п.)
А в остальном...
Здравствуйте, Анатолий Широков, Вы писали:
АШ>Здравствуйте, Clipper, Вы писали:
C>>для чего они нужны и имеют ли какой-то смысл.
C>>чем их функциональные возможности отличаются от обычных.
C>>принцип их работы и т.п.
C>>раскажите или дайте ссылку где почитать.
ссылка:
www.rsdn.ru/search?q=callback
C>>thanks.
АШ>Функция обратного вызова это логическое понятие. Фукнции обратного вызова используются в механизмах оповещения клиента о наступлении какого-либо события. А с точки зрения языка это такая же обычная функция как и все остальные.
Ну, если трактовать понятие "событие" широко... то да.
А вообще, это выполнение клиентского кода под руководством серверного (библиотечного).
С точки зрения языка это не "такая же обычная функция", а удовлетворяющая определённым конвенциям — поскольку её будет вызывать сервер, а он придерживается некоторых своих догадок.
В первую очередь — это конвенция вызова (число и тип параметров, способ заполнения и очищения стека, тип и способ возвращаемого значения).
Для библиотеки шаблонов эти ограничения существенно шире. Например, требование, чтобы это была не функиия, а функциональный объект, являющийся моделью (а то и наследником) std::unary_function / std::binary_function и т.п.
для чего они нужны и имеют ли какой-то смысл.
чем их функциональные возможности отличаются от обычных.
принцип их работы и т.п.
раскажите или дайте ссылку где почитать.
thanks.