БлогNot. C++: функция возвращает указатель на функцию...

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 [6713 просмотров]


теги: c++ программирование

К этой статье пока нет комментариев, Ваш будет первым