Примеры таблиц переходов на C

Приведите, пожалуйста, несколько примеров использования таблицы переходов. Я видел этот пример в Википедии:

#include <stdio.h>
#include <stdlib.h>

typedef void (*Handler)(void);    /* A pointer to a handler function */



/* The functions */
void func3 (void) { printf( "3\n" ); }
void func2 (void) { printf( "2\n" ); }
void func1 (void) { printf( "1\n" ); }
void func0 (void) { printf( "0\n" ); }



Handler jump_table[4] = {func0, func1, func2, func3};



int main (int argc, char **argv) {
    int value;

    /* Convert first argument to 0-3 integer (Hash) */
    value = atoi(argv[1]) % 4;
    if (value < 0) {
        value *= -1;
    }

    /* Call appropriate function (func0 thru func3) */
    jump_table[value]();
}

Но мне было интересно, есть ли альтернативный способ вызова функции вместо использования индекса, как показано, в приведенном выше случае это jump_table[value]();

Я хочу добиться того, чтобы вместо использования индекса можно было использовать имя самой функции.

Например, предположим, что у нас есть все указатели на функции в структуре.

typedef struct _funcptrs
{
  void func1();
  void func2();
} funcptrs;

и теперь, когда я хочу вызвать функцию, могу ли я сделать что-то вроде funcptrs.func1()?

5
задан Brian Tompsett - 汤莱恩 24 June 2015 в 13:21
поделиться