windows - C ++ functor som en funktionspeger

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en Functor, som jeg skal sende til en funktion, der modtager en funktionspeger som en parameter (som CreateThread).


Kan jeg konvertere det til en statisk metode adresse på en eller anden måde? Og hvis ikke, hvordan kan jeg gøre det?

Bedste reference


Nej, du kan ikke konvertere en klasse-type objekt til en funktionspeger.


Du kan dog skrive en funktion til ikke-medlem wrapper, der kalder medlemsfunktionen i den rigtige instans. Mange API'er, herunder CreateThread, giver dig mulighed for at angive en peger, som den vil give tilbage til dig, når den kalder din tilbagekaldelse (for CreateThread, dette er lpParameter -parameteren. For eksempel:


DWORD WINAPI FunctorWrapper(LPVOID p)
{
    // Call operator() on the functor pointed to by p:
    return (*static\_cast<FunctorType*>(p))();
}

// Used as:
FunctorType f;
CreateThread(0, 0, &FunctorWrapper, &f, 0, 0);