Listing 9: Making use of pointers and arbitrary casting.

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;
}