C ++库 - < functional>

简介

函数对象是专门设计用于与函数类似语法的对象. std :: function的实例可以存储,复制和调用任何Callable目标 - 函数,lambda表达式,绑定表达式或其他函数对象,以及指向成员函数和指向数据成员的指针.

声明

以下是std :: function的声明.

template<class >
class function;

C ++ 11

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

参数

  • R :  result_type.

  • argument_type : 如果sizeof ...(Args)== 1并且T是Args中的第一个也是唯一的类型.

示例

在下面的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

会员功能

非会员功能

Sr.No.成员函数定义
1(构造函数)它用于构造一个新的std: :function instance
2(析构函数)它用于销毁std :: function实例
3operator =用于分配新目标
4swap用于交换内容
5分配它用于分配新目标
6operator bool用于检查是否包含有效目标
7operator()它用于调用目标

Sr.No.非成员函数定义1 std :: swap  它专门用于std :: swap算法2 operator == operator!=  它将std :: function与nullptr进行比较

运算符类

Sr.No.运算符类定义
1bit_and这是一个按位AND函数对象类
2bit_or这是一个按位OR函数对象类
3bit_xor这是一个按位XOR函数对象类
3divides这是一个除法函数对象类
4equal_to它是一个相等的函数对象类比较
5greater这是一个大于不等式比较的函数对象类
6greater_equal这是一个大于或等于的函数对象类等于比较
7less这是一个函数对象类,用于减少 - 比不等式比较
8less _equal这是一个比较小于或等于的函数对象类
9logical_and这是一个逻辑AND函数对象类
10logical_not这是一个合乎逻辑的NOT函数对象类
11logical_or这是一个逻辑OR函数对象类
12minus这是一个减法函数对象类
1 3modulus这是一个模数函数对象类
14multiplies这是一个乘法函数对象类
15negate这是一个负函数对象类
16not_equal_to它是用于非等式比较的函数对象类
17plus这是一个加法函数对象类