C++: функция возвращает указатель на функцию...
Собственно, это и на обычном C работает. Зачем? Ну, например, selectorFunc
- это функция, принимающая параметр int
и возвращающая указатель на функцию без параметров, возвращающую значение int
. selectPtr
- обычный указатель на функцию типа int
без аргументов. Функция selectFunction
типа selectPtr
будет служить селектором других функций, возвращая их адреса, а "пользоваться" результатом селекции будет selectFuncPtr
:
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> typedef int (*selectorFunc(int))(); typedef int (*selectPtr)(); int f1() { return 1; } int f2() { return 2; } int f0() { return 0; } selectPtr selectFunction (int n) { switch (n) { case 1: return &f1; case 2: return &f2; default: return &f0; } } int main() { selectorFunc *funcPtr = &selectFunction; selectPtr selectFuncPtr = funcPtr (2); printf("\n%d", selectFuncPtr()); fflush(stdin); getchar(); return 0; }
Чем это отличается от простого
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> typedef int (*selectPtr)(); int f1() { return 1; } int f2() { return 2; } int f0() { return 0; } int main() { selectPtr selectFuncPtr = &f2; printf("\n%d", selectFuncPtr()); fflush(stdin); getchar(); return 0; }
? Ну, хотя бы тем, что selectFunction
может обеспечить дополнительный контроль допустимости n
, а не ставит напрямую адрес в указатель. Мдя, типично-ночной пост о программировании, спать пора :)
13.11.2015, 01:08 [6865 просмотров]