The existence of them is known at compile time based on P and T, so it should be possible to remove the function pointers from the structs. This is equivalent to what template C++ does.
For user overriding, it could be made so that FREE, COPY, COMPARE can be defined to custom function(s).