入门教程

Function 函数包装器

Function 类是一种函数包装器,它是 std::function 的别名。

因为 Function 只是简单的给 std::function 起了个别名,所以有关 Function 的用法你都可以在各大学习网站上找到。

在本教程中,只简单解答一下新手使用 Function 时的疑问:


Q: Function最常见的用法有哪些?
A:

一个 Function 对象可以包装下列这几种可调用元素类型:函数、函数指针、类成员函数指针、或任意类型的函数对象(例如重载了 operator() 操作的结构体)

举例说明:

  • 包装函数或函数指针
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void Func1()
{
// ...
}

bool Func2(int, int)
{
// ...
}

class T
{
public:
static void Func3()
{
// ...
}
};

// 包装不同类型的函数
Function<void()> func1 = Func1;
Function<bool(int, int)> func2 = Func2;
Function<void()> func3 = T::Func3;
  • 包装类成员函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class T
{
public:
void Func()
{
// ...
}
};

// T 类型的变量
T t;

// 包装类成员函数
Function<void()> func = std::bind(&T::Func, &t);
  • 包装任意类型的可调用对象(Callable Object)
1
2
3
4
5
6
7
8
// Lambda 函数
auto lambda = []()
{
// ...
};

// 包装 Lambda 函数
Function<void()> func = lambda;