C++ 函数指针

函数指针

先简单的定义一下。

1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <vector>
typedef void(*HelloWorldFunction)(); # HelloWorldFunction是名字,随意的
void HelloWorld()
{
std::cout << "hello world" << std::endl;
}
int main()
{
HelloWorldFunction h = HelloWorld;
h();//调用
}

以参数的形式传递

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void PrintFunction(int i)
{
std::cout << "value is :" << i << std::endl;
}
void ForEach(const std::vector<int>& ls, void(*printfunc)(int))
{
for (int var : ls)
{
printfunc(var);
}
}
int main()
{
std::vector<int> vecs = { 1,2,3,4,5 };
ForEach(vecs, PrintFunction); //传入符合参数类型的函数
system("pause");
return 0;
}

或者使用lambdas表达式

1
2
3
4
5
6
//或者用lambdas表达式 []表示这是一个函数
//[=] by value [&] by reference
ForEach(vecs, [](int value)
{
std::cout << "value is :" << value << std::endl;
});

捕获外部对象

[a,&b] a是值传递(by copy),b是引用传递(by reference)

1
2
3
4
int a = 5;
auto lam = [=]() {
std::cout << "value is :" << a << std::endl;
};