Why indirect through a function pointer instead of calling it directly?