Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++ functor as a function pointer

I have a Functor which I need to send to a function which receives a function pointer as a parameter (such as CreateThread).

Can I convert it to a static method address somehow? And if not, how can I do it?

like image 264
Idov Avatar asked Aug 21 '11 18:08

Idov


1 Answers

No, you can't convert a class-type object to a function pointer.

However, you can write a non-member wrapper function that calls the member function on the right instance. Many APIs, including CreateThread, allow you to provide a pointer that it will give back to you when it calls your callback (for CreateThread, this is the lpParameter parameter). For example:

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);
like image 119
James McNellis Avatar answered Sep 21 '22 14:09

James McNellis