Ответ
Да, использовал указатели на функции, хотя в современном C++ они часто заменяются более безопасными и выразительными альтернативами.
Базовое использование: Указатель на функцию хранит адрес функции для последующего косвенного вызова. Это полезно для реализации паттернов типа "стратегия" или callback-ов в C-стиле.
#include <iostream>
int add(int x, int y) { return x + y; }
int multiply(int x, int y) { return x * y; }
int main() {
// Объявление указателя на функцию, принимающую два int и возвращающую int
int (*operation)(int, int);
operation = &add; // Можно и просто operation = add;
std::cout << "5 + 3 = " << operation(5, 3) << std::endl; // Вывод: 8
operation = multiply;
std::cout << "5 * 3 = " << operation(5, 3) << std::endl; // Вывод: 15
return 0;
}
Практический контекст и эволюция:
- Указатели на функции-члены: Для работы с методами класса требуются особый синтаксис и учет виртуальности.
std::function: В современном C++ предпочитаю использоватьstd::function<void(int)>как типобезопасную обертку для любого вызываемого объекта (функция, лямбда, функтор, метод).- Шаблоны и лямбды: Чаще всего вместо явных указателей на функции использую шаблоны, принимающие любой callable-тип, или передаю лямбда-выражения, которые могут захватывать контекст.
// Пример с std::function и лямбдой #include <functional> #include <vector>
void processNumbers(const std::vector
int main() {
std::vector
Таким образом, указатели на функции — это фундаментальный механизм, понимание которого важно, но в production-коде я выбираю более современные и безопасные абстракции STL.