|
146 / 146 / 32
Регистрация: 26.10.2008
Сообщений: 782
|
|
Для чего нужны callback-функции10.04.2009, 17:55. Показов 86734. Ответов 103
Метки нет (Все метки)
0
|
|
| 10.04.2009, 17:55 | |
|
Ответы с готовыми решениями:
103
|
|
18 / 19 / 4
Регистрация: 27.06.2016
Сообщений: 236
|
||
| 28.07.2022, 21:25 | ||
|
Как сделать физику танка это вопрос математического моделирования а потом вы на это дело просто накладываете анимашку. И еще никому не удалось сделать без косяков. То дуло в стену влезет то дерево в башню падает насквозь то ещё какая нибудь хрень.
0
|
||
|
0 / 0 / 0
Регистрация: 14.06.2021
Сообщений: 17
|
|
| 26.03.2023, 16:08 | |
|
тоже задумался над этим .. ну что то на подобии в яве это интерфейсы, ну и абстрактные методы, которые надо реализовывать.. мне ,сколько я ни писал прог на яве, только приходилось применять интерфейсы, а вот абстракции не писал.
Используется чаще тогда, когда подключаешься к чужому коду, работающему независимо.
0
|
|
|
Комп_Оратор)
|
|
| 26.03.2023, 18:35 | |
|
Mitya37, интерфейс это открытые функции и данные. Они статически связаны с объектом, объявляющим интерфейс. Наследование и виртуальные методы ослабляют зависимость, но в пределах ограниченных наследованием. Обратные вызовы, ослабляют зависимость на уровне передачи адреса запускаемой функции в явном виде. Древний си-шный способ. Функция объявляющая указатель на функцию параметром, обязуется выполнить передаваемую функцию, передав её параметры (если таковые тоже передаются и нужны), а так же может куда-то вернуть результат (если предусмотрено). Внешний вызывающий код передаёт функцию и параметры, ожидая результат. То есть зависимость минимальна. Экстремальный вариант - для спартанцев (и достаточно частый) - передача
void(*)() . Легко передать что угодно и ни чего не проверяется. При наследовании есть хоть какая-то проверка типов. Зато свобода полная. В плюсах есть понятие вызываемого объекта. Существуют std::bind, std::function и лямбды. Можно самодельные функциональные объекты писать. Делай что хочешь и идёт оно лесом. Как в римском военном статуте, но... с колбэком.
0
|
|
|
Модератор
|
||||||
| 26.03.2023, 21:26 | ||||||
|
Святогор, вот наглядный пример: допустим, у нас есть одна-единственная структура с пятью полями. Получаем десять компараторов (коллбэков), чтобы иметь возможность сравнить сотрудников по любому из полей по возрастанию и по убыванию. Но при этом функция сортировки у нас всегда одна и та же - это библиотечная
std::sort(). Нам не нужно лезть в её внутренности, чтобы что-то дописать/переписать как только у нас появился новый класс, или у старого класса появились новые поля.Тысячи программистов по всему миру используют библиотечные функции, навроде std::sort(), полагаясь на контракт, который определяет внешний API таких функций1. Никто из них не меняет реализацию библиотечной функции - для большниства программистов это абстракция, чёрный ящик. Им абсолютно не важно, как она работает внутри. Но каждый из этих тысяч программистов может написать свой собственный компаратор для своего собственного класса:
sort()? Нет, конечно. Просто в функцию сортировки в качестве callback'a третьим параметром передаётся компаратор (любой функциональный объект - lambda-выражение, функтор, переопределённый оператор вызова)._______________________________ 1Ровно то же самое мы делаем и в реальной жизни - мало кто (за исключением, скажем, угонщиков) замыкает провода, чтобы завести машину - мы пользуемся внешним API (ключи зажигания), полагаясь на контракт - "я поворачиваю ключ, машина заводится".
0
|
||||||
| 26.03.2023, 21:26 | |
|
Помогаю со студенческими работами здесь
104
приведите пожалуйста реальный прмиер: для чего нужны дружественные функции?
callback функции не для кнопок на экране, а для клавиш на клав. и мышке. Как? Для чего нужны интерфейсы? Для чего нужны указатели? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Гайд, как ворваться в вайб-кодинг в мае 2026
Noname2331 17.05.2026
Простите за получившееся полотно текста, я даже не знаю, как его разбить на главы. Тут, что называется, ни добавить ни убавить, одна сцена одним дублем.
На моих глазах недавно случилось чудо. Как. . .
|
[golang] Алгоритм «Хак Госпера»
alhaos 17.05.2026
Алгоритм «Хак Госпера»
Хак Госпера (Gosper's Hack) — алгоритм нахождения следующего по величине числа с тем же количеством установленных бит.
Придуман Биллом Госпером в 1970-х, опубликован в. . .
|
Рисование бинарного древа до 6-го колена на js, svg.
russiannick 17.05.2026
<svg width="335" height="240" viewBox="0 0 335 240" fill="#e5e1bb">
<style>
<!]>
</ style>
<g id="bush">
</ g>
</ svg>
function fn(){
let rost;/ / высота древа
let xx=165,yy=210,w=256;
|
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов,
содержащихся в реализации модуля. По-умолчанию все члены модуля доступны:
module Foo
let x = 10
let boo () = printfn "boo"
. . .
|
|
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible". . .
|
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов.
import "math"
func angleClock(hour int, minutes int) float64 {
. . .
|
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo
https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html
и его же старой инструкции по установке Lazarus с gtk2. . .
|
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер.
Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
|