Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 226, средняя оценка - 4.90
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
#1

Для чего нужны callback-функции - C++

10.04.2009, 17:55. Просмотров 31092. Ответов 13
Метки нет (Все метки)

Для чего нужны callback-функции? И можно привести какой-нибуль пример по их использованию.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.04.2009, 17:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Для чего нужны callback-функции (C++):

Для чего нужны указатели на функции? - C++
для чего нужны эти указатели на функции... не проще ли вызвать саму функцию, чем заводить под нее указатель и им пользоваться...

Для чего нужны виртуальные функции и виртуальное наследование ? - C++
Для чего нужны виртуальные функции и виртуальное наследование ? Я нашел не сколько статей но не все понял. Заранее спасибо!

Для чего нужны функции void, не возращающие никаких значений? - C++
собственно сабж. выводить текст можно и без функции. а для чего делать что-то, что в дальнейшем и не пригодится в программе? #include...

приведите пожалуйста реальный прмиер: для чего нужны дружественные функции? - C++
приведите пожалуйста реальный прмиер: для чего нужны дружественные функции?

For_each и аргументы callback-функции; Как передать callback'у больше одного аргумента - C++
Изучаю контейнеры и алгоритмы stl по Майерсу . С непривычки слегка охренел и запутался в них . В общем есть у меня простой вызов...

Для чего нужны указатели? - C++
Кто может объяснить для чего нужны указатели и смысл их? в интернете одна муть и еще для чего нужно new delete

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
PB
Просто прогер
1281 / 1068 / 11
Регистрация: 13.03.2009
Сообщений: 2,502
10.04.2009, 18:09 #2
Цитата Сообщение от qwert Посмотреть сообщение
Для чего нужны callback-функции?
Так это же обработчик событий проги!
Это тот код, который реагирует внешние и внутрение воздействия, наример, выбор пункта меню или щелчок по кнопке.
1
ISergey
Maniac
Эксперт С++
1374 / 885 / 52
Регистрация: 02.01.2009
Сообщений: 2,658
Записей в блоге: 1
10.04.2009, 18:10 #3
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ну вот пример
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
using namespace std;
 
int my_function(int *arr,int len, bool(*fn)(int,int))
{
    int res = arr[0];
 
    for(int i = 1; i < len; ++i)
        if(fn(res,arr[i]))
            res = arr[i];
 
    return res;
}
 
bool max_(int i, int j) { return i < j; }
bool min_(int i, int j) { return i > j; }
 
int main()
{
    int arr[5] = {0,-1,2,3,5};
 
    cout<<"Max elem: "<<my_function(arr,5,max_)<<endl;
    cout<<"Min elem: "<<my_function(arr,5,min_)<<endl;
 
    return 0;
}
разбирайтесь
8
log
Деструктор ума
21 / 21 / 0
Регистрация: 07.03.2009
Сообщений: 326
10.04.2009, 20:03 #4
Callback эт передача исполняемогго кода в качестве одного из параметров другого колда.
Эта функция позволяет отсортировать массив блоков байт одинаковой длины. В качестве аргументов она получает адрес первого элемента массива, количество блоков в массиве, размер блока байт, и указатель на функцию сравнения двух блоков байт. - вики и прим ее
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdlib.h>
// функция сравнения целых чисел по модулю
int compare_abs(const void *a, const void *b) {
   int a1 = *(int*)a;
   int b1 = *(int*)b;
   return abs(a1) - abs(b1);
}
int main() {
   int m[10] = {1,-3,5,-100,7,33,44,67,-4, 0};
   // сортировка массива m по возрастанию модулей
   qsort(m, 10, sizeof(int), compare_abs);
   return 0;
}
1
ISergey
Maniac
Эксперт С++
1374 / 885 / 52
Регистрация: 02.01.2009
Сообщений: 2,658
Записей в блоге: 1
11.04.2009, 01:19 #5
log, Вы только запутаете ТС таким примером(хотя может и мой не лучше).
В вики написано(сами предложили):
Callback ( обратный вызов ) — передача исполняемого кода в качестве одного из параметров другого кода. Обратный вызов позволяет внутри отдельных процедур исполнять код, определённый в других контекстах программного кода, то есть код недоступный в этих процедурах для прямого вызова. Кроме того, некоторые алгоритмические задачи в качестве своих входных данных имеют не только числа или объекты, но и действия (алгоритмы). Например, задача обхода двоичного дерева с применением некоторого действия к каждому узлу дерева. Обратный вызов в этих задачах может выступать в роли этого действия (алгоритма)
Ещё в стандарте не дочитал( проблема переводить с анг. на рус.) как оно там должно бить....

Цитата Сообщение от PB Посмотреть сообщение
Так это же обработчик событий проги!
Вот вы не правы.
1
Mecid
680 / 229 / 4
Регистрация: 15.10.2007
Сообщений: 1,247
11.04.2009, 13:40 #6
Цитата Сообщение от ISergey Посмотреть сообщение
log, Вы только запутаете ТС таким примером
норм пример...Callback-Функция это функция которая передается ввиде параметра в функцию.че не ясно?
1
log
Деструктор ума
21 / 21 / 0
Регистрация: 07.03.2009
Сообщений: 326
11.04.2009, 14:56 #7
ISergey, может и прав,я просто особо дело не имел с такой функцией, а привиденные примеры, могут qwert куда нибудь подтолкнут
0
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
12.04.2009, 01:44  [ТС] #8
Спасибо! Ну, принцип и для чего нужны я понял, не так всё и сложно.
0
Mit
0 / 0 / 0
Регистрация: 13.08.2014
Сообщений: 7
16.09.2014, 14:56 #9
а по человечески никто объяснять не умеет??
примеры полные хотяб привел кто, а то хрень поймешь как работать на вызывающей стороне.
0
mss307
118 / 118 / 25
Регистрация: 14.12.2013
Сообщений: 352
16.09.2014, 15:04 #10
Mit, вот адекватный пример.
Цитата Сообщение от ISergey Посмотреть сообщение
Ну вот пример...
то, что тебе может что-то не понятно, это не значит, что плохие примеры. Есть вопросы, пиши, получишь ответ.
0
Mit
0 / 0 / 0
Регистрация: 13.08.2014
Сообщений: 7
16.09.2014, 15:27 #11
вот небольшой кусок кода, где у меня ошибка?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
typedef void(*callback_t)(void*data);
 
callback_t call_t;
 
void Fm_show(callback_t call){
call_t=call;
}
 
 void foo(){
call_t(NULL);
 }
 
  void foo2(void*data){
 
 }
 
 int main(){
Fm_show(foo2);
foo();
 }
0
edwvee
19 / 19 / 2
Регистрация: 27.01.2014
Сообщений: 232
16.09.2014, 15:37 #12
Можно передать функцию в функцию, которая считает например приближенное значение определенного интеграла. Таким образом у тебя будет одна функция для вычисления интеграла, в которую ты сможешь передавать разные функции. ..... PROFIT!
0
Croessmah
Эксперт CЭксперт С++
13206 / 7477 / 840
Регистрация: 27.09.2012
Сообщений: 18,388
Записей в блоге: 3
Завершенные тесты: 1
16.09.2014, 15:58 #13
Цитата Сообщение от Mit Посмотреть сообщение
где у меня ошибка?
а что не так?
http://ideone.com/7yd94Q
0
Mit
0 / 0 / 0
Регистрация: 13.08.2014
Сообщений: 7
16.09.2014, 20:08 #14
да, верно, а ошибка была в другом месте
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2014, 20:08
Привет! Вот еще темы с ответами:

Для чего нужны интерфейсы? - C++
Объясните на пальцах для чего нужны интерфейсы, как я понял они описывают методы и свойства, которые при наследовании классами должны были...

callback функции не для кнопок на экране, а для клавиш на клав. и мышке. Как? - C++
Я так понимаю, что в WIN API все действия делаются асинхронно через callback функции. Но как инициировать действие для клавиш клавиатуры...

Для чего нужны битовые операции? - C++
Здравствуйте. Дошел в книге Стенли до битовых операций, но никак не могу понять их предназначение. Где вообще они используются и как с...

для чего нужны хеш таблицы? - C++
для чего нужны хеш таблицы? если есть массивы )


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
16.09.2014, 20:08
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru