Как этот указатель функции лучше, чем if-else или case switch? Это потому, что указатель функции помогает выполнять функции обратного вызова и тем самым способствует асинхронной реализации?Функциональный указатель
ответ
Лучше, если функции не известны заранее. Как бы вы создали стандартную библиотеку C qsort()
без использования указателя функции?
«если функции не известны заранее», что является ключевым моментом. Я просто хотел подчеркнуть это. – givanse
Это не «лучше», это другое. Да, основная цель указателя функции - обеспечить функцию обратного вызова. Нет, это напрямую не связано с асинхронизмом.
Для получения дополнительной информации о указателях функций обратитесь к this article.
По словам Найджела Джонса, он улучшает читаемость кода, среди других
http://embeddedgurus.com/stack-overflow/2010/04/efficient-c-tip-12-be-wary-of-switch-statements/
Он даже дает некоторые примеры:
указатели на функции приводят к улучшению дизайна вашего кода , Подумайте, когда у вас есть возможность вызвать одну функцию из пятидесяти функций. Насколько массивным был бы случай переключения? Однако вы можете легко сопоставить все указатели функций в соответствии с их идентификатором и вызвать соответствующую функцию с карты с помощью «id». Код будет легко поддерживать и выглядеть аккуратно.
Есть другие преимущества и возможности использования указателя функций. Для получения подробного объяснения посмотрите учебник here
Кроме того, у вас есть гарантии сложности при использовании карты, которую вы не имели бы в коммутационном футляре. Компилятор не всегда может построить таблицу перехода, в случае, когда поиск правой функции, которая будет вызвана, будет последовательной. На карте поиск будет очень быстрым O (log N) с бинарным деревом или O (1) в карте хэша. – lvella
- 1. Функциональный указатель в структуре
- 2. Указание на функциональный указатель
- 3. C++ Указатель на указатель на функциональный параметр
- 4. Функциональный указатель на адрес (C++)
- 5. Функция Указатель как функциональный параметр
- 6. Указатель пустоты как функциональный параметр
- 7. Функциональный указатель, Функтор или Лямбда?
- 8. Функциональный указатель на функцию-член
- 9. Функциональный указатель delclaration в C++
- 10. Функциональный указатель с несколькими аргументами
- 11. Функциональный указатель на метод класса
- 12. Функциональный указатель при возврате значений
- 13. Функциональный указатель на оператор сравнения
- 14. C++ Функциональный указатель объектов экземпляра
- 15. Функциональный указатель как аргумент SLOT
- 16. Функциональный указатель на нестационарную функцию
- 17. Функциональный указатель на шаблонную функцию
- 18. Функциональный указатель на функцию макроса
- 19. Функциональный указатель на статический член класса?
- 20. Функциональный указатель-массив для метода в классе
- 21. Функциональный указатель как член C struct
- 22. C# вызов C++ DLL через функциональный указатель
- 23. Функциональный указатель на функцию __attribute __ ((const))?
- 24. Функциональный указатель, используемый в struct in C
- 25. Функциональный указатель на объект, полученный параметром
- 26. Функциональный указатель как параметр функции qsort
- 27. Функциональный указатель и соглашение о вызовах
- 28. Функциональный указатель на функцию экземпляра класса Singleton
- 29. C++ Функциональный указатель на функцию-член объекта статического указателя
- 30. Функциональный указатель на динамическую библиотеку двумя разными способами
Возможно, вы захотите упомянуть язык, на который вы ссылаетесь. – griegs
Почему, какая разница знала бы язык? –
Лучше в каком контексте? Не лучше писать условные обозначения или переключатели ... – Stephen