I dont know much about functional programming, but what stops you 
defining
int readInt(string prompt, validator_t validator) { ... }
as a free standing function and just call it from both parts of 
your code? What is the benefit of indirection that you create 
when passing function pointer?