代码如下:
#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
) 恰恰需要一个纯函数指针。
我需要一个解决问题的建议。谢谢。
最佳答案
您不能将 std::function
转换为函数指针(您可以反其道而行之)。您应该使用函数指针或 std::function
。如果您可以使用 std::function
而不是指针,那么您应该这样做。
这使您的代码工作:
typedef function<void(void)> fp;
关于c++ - std::function -> 函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10555464/