Fermi with C++ function pointers

Can anyone clarify how this would work in practice ?

For example, if I have a thread block, can I pass in a function pointer as a parameter, and all the threads of the block then call the function with their thread-specific data (not necessarily divergent) ? But, then can I pass in two function pointers and choose the one to call based on thread-specific data (possibly very divergent) ?