我可以定义一个指向std :: function类型对象的函数指针吗?

时间:2016-03-18 07:24:56

标签: c++ c++11 lambda

如下所示:

#include <functional>

int main()
{
    std::function<int(int)> func = [](int x){return x;};
    int* Fptr(int) = &func; //error
}

我得到的错误是

temp.cpp: In function ‘int main()’:
temp.cpp:6:15: warning: declaration of ‘int* Fptr(int)’ has ‘extern’ and is initialized
  int* Fptr(int) = &func; //error
               ^
temp.cpp:6:20: error: invalid pure specifier (only ‘= 0’ is allowed) before ‘func’
  int* Fptr(int) = &func; //error
                    ^
temp.cpp:6:20: error: function ‘int* Fptr(int)’ is initialized like a variable

从lambda函数到函数指针的更直接的方法也很有用。

1 个答案:

答案 0 :(得分:19)

int* Fptr(int)

声明一个函数&#34; Fptr&#34;需要int并返回int*

函数指针声明类似于

int (*Fptr)(int)

此外,std::function<int(int)>不是lambda函数的类型,但是lambda函数可以隐式转换为该类型。

幸运的是,一个(非捕获)lambda函数也可以隐式转换为函数指针,因此从lambda函数到函数指针的最直接方式是

int (*Fptr)(int) = [](int x){return x;};