std::function -> function pointer
bind, c++, functor
Solution
You've greatly oversimplified your real problem and turned your question into an XY problem. Let's get back to your real question: how to call `SetupIterateCabinet` with a non-static member function as a callback.
Given some class:
class MyClass
{
public:
UINT MyCallback(UINT Notification, UINT_PTR Param1, UINT_PTR Param2)
{
/* impl */
}
};
In order to use `MyClass::MyCallback` as the third argument to `SetupIterateCabinet`, you need to pass a `MyClass*` for the `Context` argument and use a plain shim function to take that `Context` argument and do the right thing with it:
UINT MyClassCallback(PVOID Context, UINT Notification, UINT_PTR Param1, UINT_PTR Param2)
{
return static_cast<MyClass*>(Context)->MyCallback(Notification, Param1, Param2);
}
int main()
{
MyClass mc;
SetupIterateCabinet(_T("some path"), 0, MyClassCallback, &mc);
}
Problem
Here is a code: ``` #include <functional> using namespace std::tr1; typedef void(*fp)(void); void foo(void) { } void f(fp) { } int main() { function<void(void)> fun = foo; f(fun); // error f(foo); // ok } ``` Originally i need to make a function pointer from non-static class method because i need to save data between function callings. I tried `std::tr1::bind` and `boost::bind`, but they return functional object, not pointer, which, as i can see, can't be "casted" to pure functional pointer. While the function signature (`SetupIterateCabinet`) demands a pure func pointer exactly. I need an advise how to solve the problem. Thank you.