Как использовать указатель на функцию в структуре C?

Я хочу узнать больше об использовании указателей функций в структурах C как о способе эмуляции объектно-ориентированного -программирования, но в своих поисках я только что нашел такие вопросы, как этот , где ответ заключается в том, чтобы просто использовать указатель на функцию без описания того, как это будет работать.

Я думаю, что-то вроде этого

#include 
#include 

struct my_struct
{
    int data;
    struct my_struct* (*set_data) (int);
};

struct my_struct* my_struct_set_data(struct my_struct* m, int new_data)
{
    m->data = new_data;
    return m;
}

struct my_struct* my_struct_create() {
    struct my_struct* result = malloc((sizeof(struct my_struct)));
    result->data = 0;
    result->set_data = my_struct_set_data;
    return result;
}

int main(int argc, const char* argv[])
{
    struct my_struct* thing = my_struct_create();
    thing->set_data(1);
    printf("%d\n", thing->data);
    free(thing);
    return 0;
}

Но это дает мне предупреждения компилятора warning: assignment from incompatible pointer type, поэтому очевидно, что я делаю что-то не так. Может ли кто-нибудь предоставить небольшой, но полный пример того, как правильно использовать указатель функции в структуре C?

Мой класс, преподаваемый на C, даже не упоминает об этом. Это заставляет меня задаться вопросом, действительно ли они используются программистами C. Каковы преимущества и недостатки использования указателей функций в структурах C?

8
задан Eva 14 July 2012 в 05:51
поделиться