Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> typedef void 
V
    Опции темы
mrgloom
Дата 16.4.2012, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



Код

typedef void (*UpdateCallbackFn)( const int id, void* context );


встретил в коде такую вот конструкцию, хотелось бы понять для чего она применяется.

отсюда о назначении не понял
http://stackoverflow.com/questions/3982470...-something-mean
PM MAIL   Вверх
mes
Дата 16.4.2012, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



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



--------------------
PM MAIL WWW   Вверх
mrgloom
Дата 16.4.2012, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



это может быть любая функция которая принимает ( const int id, void* context ) ?
а куда потом используют указатель на функцию?
PM MAIL   Вверх
borisbn
Дата 16.4.2012, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(mrgloom @  16.4.2012,  16:22 Найти цитируемый пост)
а куда потом используют указатель на функцию? 

Код

typedef double (*trigonometric_t)( double );
trigonometric_t trigonometric;
if ( кто-то-выбрал-косинус ) {
    trigonometric = cos;
}
else if ( кто-то-выбрал-синус ) {
    trigonometric = sin;
}
double arg = ...;
double result = another_function_that_need_trigonometric_function( trigonometric, arg );


Добавлено через 10 минут и 46 секунд
Но в твоём случае, похоже, что это - callback. Обычно его используют примерно так: есть функция, которая делает некоторые действия и при наступлении какого-то события (или при нахождении какого-то результата) она должна сообщить тому, кто её вызвал об этом событии.
Например: ты делаешь функцию, которая находит в каталоге все файлы по указанному расширению. При нахождении очередного файла тебе нужно сообщить тому, кто тебя вызвал о том, что очередной файл найден.
Код

void (*callback_t)( const char * );
void search_for_files( const char * dir, const char * ext, callback_t callback ) {
    while ( в каталоге dir есть файлы с расширением ext ) // блин....... вот бы так писать на Си++ )))
    {
        const char * fileName = имя очередного файла;
        callback( fileName );
    }
}
//--------------------
//теперь вызывающая сторона:
void onFileFound( const char * fileName ) {
   ... сделать с очередным файлом что требуется
}

int main() {
    search_for_files( "need/path", "*.cpp", onFileFound );
}



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
mrgloom
Дата 16.4.2012, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



о так всё стало намного яснее.
а как эта произвольная функция будет вызывается внутри another_function_that_need_trigonometric_function?


да у меня колбэк, там что то с трэдами связано.

у вас какой то пример странный
почему вместо 
Код

callback( fileName );
  нельзя писать сразу 
Код

onFileFound( fileName ); 
 ?
PM MAIL   Вверх
borisbn
Дата 16.4.2012, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(mrgloom @  16.4.2012,  17:04 Найти цитируемый пост)
почему вместо 

callback( fileName );
  нельзя писать сразу 

onFileFound( fileName ); 

чтобы твоя функция стала универсальной. чтобы её можно было использовать в другом проекте, где нет никакого onFileFound.
или даже в этом проекте, но в другом месте и с другой функцией в качестве callback'а. Пример:
Код

//теперь вызывающая сторона:
void onCppFound( const char * fileName ) {
   ... сделать что требуется c исходником
}
void onHFound( const char * fileName ) {
   ... сделать что требуется c заголовочным
}
int main() {
    search_for_files( "need/path", "*.cpp", onCppFound);
    search_for_files( "need/path", "*.h", onHFound);
}




--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
mrgloom
Дата 16.4.2012, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



всё разобрался.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0514 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.