1° varianteOriginariamente 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?
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.

Rispondi quotando