Ecco un esempio in cui l'uso del puntatore di funzione membro - all'interno di una classe, come dettaglio di implementazione - è perfettamente accettabile, se si lavora con codice sensibile alle prestazioni per diverse architetture della CPU.
Consulta le Domande frequenti su C ++ per l'uso corretto del puntatore a funzioni dei membri. Richiede una sintassi diversa rispetto ai puntatori di funzioni statiche.
(Grazie per Kaz per il suggerimento.)
class SomePerformanceCriticalOperation
{
private:
// the type declaration of a member function pointer
typedef int (SomePerformanceCriticalOperation::*ProcessPtr)(size_t bytesToProcess, void* dataPtr);
// the instance of a member function pointer, to be assigned to a member function
// (inside the constructor)
ProcessPtr m_ptr;
public:
SomePerformanceCriticalOperation()
{
cpu_features feat = ::GetCpuFeatures();
if (TestBit(feat, cpu_features_SSE41))
m_ptr = &SomePerformanceCriticalOperation::Process_SSE41;
else if (TestBit(feat, cpu_features_SSSE3))
m_ptr = &SomePerformanceCriticalOperation::Process_SSSE3;
else if (TestBit(feat, cpu_features_SSE3))
m_ptr = &SomePerformanceCriticalOperation::Process_SSE3;
else if (TestBit(feat, cpu_features_SSE2))
m_ptr = &SomePerformanceCriticalOperation::Process_SSE2;
else if (TestBit(feat, cpu_features_MMX))
m_ptr = &SomePerformanceCriticalOperation::Process_MMX;
else
m_ptr = &SomePerformanceCriticalOperation::Process_CPlusPlus;
}
// The CPU-specific functions, as usual. (Omitted.)
int Process_SSE41(size_t bytesToProcess, void* dataPtr) { ... }
};