Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > typedef void


Автор: mrgloom 16.4.2012, 15:37
Код

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


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

отсюда о назначении не понял
http://stackoverflow.com/questions/3982470/what-does-typedef-void-something-mean

Автор: mes 16.4.2012, 15:45
указатель на функцию..

Автор: mrgloom 16.4.2012, 16:22
это может быть любая функция которая принимает ( const int id, void* context ) ?
а куда потом используют указатель на функцию?

Автор: borisbn 16.4.2012, 16:41
Цитата(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 );
}

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


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

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

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

onFileFound( fileName ); 
 ?

Автор: borisbn 16.4.2012, 17:09
Цитата(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);
}


Автор: mrgloom 16.4.2012, 17:25
всё разобрался.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)