c++ std :: function – >函数指针

这是一个代码:

#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
}

最初我需要从非静态类方法创建一个函数指针,因为我需要在函数调用之间保存数据.我试过std :: tr1 :: bind和boost :: bind,但它们返回的是函数对象,而不是指针,正如我所见,它不能被“转换”为纯函数指针.虽然函数签名(SetupIterateCabinet)需要一个纯粹的func指针.

我需要建议如何解决问题.谢谢.

最佳答案
你已经大大简化了你的真实问题并将你的问题变成了XY problem.让我们回到你真正的问题:如何使用非静态成员函数作为回调来调用SetupIterateCabinet.

鉴于某些课程:

class MyClass
{
public:
    UINT MyCallback(UINT Notification, UINT_PTR Param1, UINT_PTR Param2)
    {
        /* impl */
    }
};

为了使用MyClass :: MyCallback作为SetupIterateCabinet的第三个参数,您需要为Context参数传递MyClass *并使用普通的shim函数来获取Context参数并使用它执行正确的操作:

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);
}

转载注明原文:c++ std :: function – >函数指针 - 代码日志