Cpp Standard Library 简明教程

C++ Library - <functional>

Introduction

函数对象是指专门用于与函数类似的语法一起使用的对象。std::function 的实例可以存储、复制和调用任何可调用的目标——函数、lambda 表达式、bind 表达式或其他函数对象以及成员函数指针和数据成员指针。

Declaration

以下是 std::function 的声明。

template<class >
class function;

C++11

template< class R, class... Args >
class function<R(Args...)>

Parameters

  1. R − result_type.

  2. argument_type − 如果 sizeof…​(Args) == 1,并且 T 是 Args 中第一个也是唯一一个类型,则为 T。

Example

以下是 std::function 的示例。

#include <functional>
#include <iostream>

struct Foo {
   Foo(int num) : num_(num) {}
   void print_add(int i) const { std::cout << num_+i << '\n'; }
   int num_;
};

void print_num(int i) {
   std::cout << i << '\n';
}

struct PrintNum {
   void operator()(int i) const {
      std::cout << i << '\n';
   }
};

int main() {
   std::function<void(int)> f_display = print_num;
   f_display(-9);

   std::function<void()> f_display_42 = []() { print_num(42); };
   f_display_42();

   std::function<void()> f_display_31337 = std::bind(print_num, 31337);
   f_display_31337();

   std::function<void(const Foo&, int)> f_add_display = &Foo::print_add;
   const Foo foo(314159);
   f_add_display(foo, 1);

   std::function<int(Foo const&)> f_num = &Foo::num_;
   std::cout << "num_: " << f_num(foo) << '\n';

   using std::placeholders::_1;
   std::function<void(int)> f_add_display2= std::bind( &Foo::print_add, foo, _1 );
   f_add_display2(2);

   std::function<void(int)> f_add_display3= std::bind( &Foo::print_add, &foo, _1 );
   f_add_display3(3);

   std::function<void(int)> f_display_obj = PrintNum();
   f_display_obj(18);
}

示例输出如下所示 −

-9
42
31337
314160
num_: 314159
314161
314162
18

Member functions

Sr.No.

Member functions

Definition

1

(constructor)

它用于构造一个新的 std::function 实例

2

(destructor)

它用于销毁 std::function 实例

3

[role="bare"]../cpp_standard_library/cpp_functional_operator.html

它用于分配新目标

4

swap

它用于交换内容

5

assign

它用于分配新目标

6

operator bool

它用于检查是否包含有效目标

7

operator()

用于调用目标

Non-member functions

Sr.No.

Non-member functions

Definition

1

std::swap

专门用于 std::swap 算法

2

[role="bare"]../cpp_standard_library/cpp_functional_operator_non_member.html

将 std::function 与 nullptr 比较

Operator classes

Sr.No.

Operator classes

Definition

1

bit_and

这是一个按位 AND 函数对象类

2

bit_or

这是一个按位 OR 函数对象类

3

bit_xor

这是一个按位 XOR 函数对象类

3

divides

这是一个除法函数对象类

4

equal_to

这是一个用于比较相等性的函数对象类

5

greater

这是一个用于比较大于的函数对象类

6

greater_equal

这是一个用于比较大于或等于的函数对象类

7

less

这是一个用于比较小于的函数对象类

8

less_equal

这是一个用于比较小于或等于的函数对象类

9

logical_and

这是一个逻辑 AND 函数对象类

10

logical_not

这是一个逻辑 NOT 函数对象类

11

logical_or

这是一个逻辑 OR 函数对象类

12

minus

这是一个减法函数对象类

13

modulus

这是一个模数函数对象类

14

multiplies

这是一个乘法函数对象类

15

negate

这是一个取负函数对象类

16

not_equal_to

它是非相等比较的函数对象类

17

plus

它是一个函数对象类