Возможно ли в C иметь структуру или объединение функций? - PullRequest
3 голосов
/ 27 сентября 2019

Есть ли способ, объединение, структура или что-то еще, иметь группу функций?

typedef struct {
    //Gives an error
    int sqr(int i) {
        return i * i;
    }
    //Also gives an error
    int cube (int i) {
        return i * i * i;
    }
} test;

1 Ответ

7 голосов
/ 27 сентября 2019

Поля в структурах могут быть указателями на функции:

struct Interface {
    int (*eval)(int i);
};

Вы не можете определять функции в теле структуры, но вы можете назначать функции с одинаковой сигнатурой для полей структуры:

int my_sqr(int i) {
    return i * i;
}

int my_cube(int i) {
    return i * i * i;
}

struct Interface squarer = { my_sqr };
struct Interface cuber = { my_cube };

Затем вызовите поля как обычную функцию:

printf("%d\n", squarer.eval(4));    // "16"
printf("%d\n", cuber.eval(4));      // "64"
...