void comp_max(void *p, int i) { int *pmax = (int *)p; if (i > *pmax) *pmax = i; } int func(Collection *c) { int max = INT_MIN; c->apply(&max, comp_max); return max; }