2010-06-16 5 views
0

Как этот указатель функции лучше, чем if-else или case switch? Это потому, что указатель функции помогает выполнять функции обратного вызова и тем самым способствует асинхронной реализации?Функциональный указатель

+1

Возможно, вы захотите упомянуть язык, на который вы ссылаетесь. – griegs

+0

Почему, какая разница знала бы язык? –

+2

Лучше в каком контексте? Не лучше писать условные обозначения или переключатели ... – Stephen

ответ

2

Лучше, если функции не известны заранее. Как бы вы создали стандартную библиотеку C qsort() без использования указателя функции?

+0

«если функции не известны заранее», что является ключевым моментом. Я просто хотел подчеркнуть это. – givanse

2

Это не «лучше», это другое. Да, основная цель указателя функции - обеспечить функцию обратного вызова. Нет, это напрямую не связано с асинхронизмом.

Для получения дополнительной информации о указателях функций обратитесь к this article.

1

указатели на функции приводят к улучшению дизайна вашего кода , Подумайте, когда у вас есть возможность вызвать одну функцию из пятидесяти функций. Насколько массивным был бы случай переключения? Однако вы можете легко сопоставить все указатели функций в соответствии с их идентификатором и вызвать соответствующую функцию с карты с помощью «id». Код будет легко поддерживать и выглядеть аккуратно.

Есть другие преимущества и возможности использования указателя функций. Для получения подробного объяснения посмотрите учебник here

+0

Кроме того, у вас есть гарантии сложности при использовании карты, которую вы не имели бы в коммутационном футляре. Компилятор не всегда может построить таблицу перехода, в случае, когда поиск правой функции, которая будет вызвана, будет последовательной. На карте поиск будет очень быстрым O (log N) с бинарным деревом или O (1) в карте хэша. – lvella

Смежные вопросы