Originariamente inviato da yagorossi
posso mettere come elemento di una struttura una funzione che mangia un elemento della stessa struttura (o sui sottoelementi) e sputa un numero?
1° variante
codice:
#include <stdio.h>
typedef struct {
int a;
int (*doTask)(crom*);
} crom;
int fooTask(crom* c)
{
return c->a / 2;
}
int main()
{
crom c = {10, fooTask};
printf("%d", c.doTask(&c));
return 0;
}
2° variante, utilizzata da alcuni moduli del kernel di linux
codice:
#include <stdio.h>
struct data {
char buffer[80];
};
struct data_operations {
void (*fill)(struct data *);
void (*convert)(struct data *);
};
void con_fill(struct data *d)
{
printf("con_fill\n");
}
void con_convert(struct data *d)
{
printf("con_convert\n");
}
struct data_operations con_data_operation = {
fill: con_fill,
convert: con_convert
};
int main()
{
struct data d;
struct data_operations* d_op = &con_data_operation;
d_op->fill(&d);
d_op->convert(&d);
return 0;
}
In c++ questa cosa si fa in maniera più pulita, dato che è orientato ad oggetti e supporta il polimorfismo, e non è necessario "simularlo" con questa tecnica.