Я хочу узнать больше об использовании указателей функций в структурах 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?