+ 1
A generic pointer allows a pointer to unformatted memory so that you can later recast the pointer to an expected type or a function return. The purpose being so that a generic function can be templated.
I've seen this with threaded functions where the template accepts "Foo(void* f)". Because the size of the function parameters are known (2, 4, or 8 bytes) and the caller doesn't care what the function points to, then any method that uses the template can be threaded, e.g. "Bar(void* b)". Then within the threaded method you recast the pointer to the desired type: dynamic_cast<int*>(f), dynamic_cast<MyStruct*>(b).
I have also used generic function types in order to create event handlers on a thread (lock mutex, check for event, if event call Foo and reset event, unlock mutex). The function itself (and event) can be anything but it must adhere to a fixed-sized template.



