Bibliothèque C ++ - <fonctionnelle>

introduction

Les objets fonction sont des objets spécifiquement conçus pour être utilisés avec une syntaxe similaire à celle des fonctions. Les instances de std :: function peuvent stocker, copier et appeler n'importe quelle cible appelable - fonctions, expressions lambda, expressions de liaison ou autres objets de fonction, ainsi que des pointeurs vers des fonctions membres et des pointeurs vers des membres de données.

Déclaration

Voici la déclaration de std :: function.

template<class >
class function;

C ++ 11

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

Paramètres

  • R - result_type.

  • argument_type - T si sizeof ... (Args) == 1 et T est le premier et le seul type dans Args.

Exemple

Dans l'exemple ci-dessous pour 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);
}

L'exemple de sortie devrait être comme ceci -

-9
42
31337
314160
num_: 314159
314161
314162
18

Fonctions des membres

Sr.No. Fonctions des membres Définition
1 (constructeur) Il est utilisé pour construire une nouvelle instance de std :: function
2 (destructeur) Il est utilisé pour détruire une instance de std :: function
3 opérateur = Il est utilisé pour attribuer une nouvelle cible
4 échanger Il est utilisé pour échanger le contenu
5 attribuer Il est utilisé pour attribuer une nouvelle cible
6 opérateur bool Il est utilisé pour vérifier si une cible valide est contenue
sept opérateur() Il est utilisé pour appeler la cible

Fonctions non membres

Sr.No. Fonctions non membres Définition
1 std :: swap Il spécialise l'algorithme std :: swap
2 opérateur == opérateur! = Il compare une fonction std :: avec nullptr

Classes d'opérateurs

Sr.No. Classes d'opérateurs Définition
1 bit_and C'est une classe d'objets de fonction AND au niveau du bit
2 bit_or C'est une classe d'objets de fonction OR au niveau du bit
3 bit_xor Il s'agit d'une classe d'objets de fonction XOR au niveau du bit
3 se divise C'est une classe d'objets de fonction de division
4 égal à C'est une classe d'objets de fonction pour la comparaison d'égalité
5 plus grand C'est une classe d'objets de fonction pour une comparaison plus grande que l'inégalité
6 Greater_equal Il s'agit d'une classe d'objets de fonction pour une comparaison supérieure ou égale à
sept Moins C'est une classe d'objets de fonction pour la comparaison de moins que l'inégalité
8 less_equal C'est une classe d'objets de fonction pour la comparaison inférieure ou égale à
9 logique_et C'est une classe d'objets de fonction logique AND
dix logique_non C'est une classe d'objet de fonction logique NOT
11 logique_ou C'est une classe d'objets de fonction logique OU
12 moins C'est une classe d'objets de fonction de soustraction
13 module C'est une classe d'objets de fonction de module
14 multiplie C'est une classe d'objets de fonction de multiplication
15 nier C'est une classe d'objets de fonction négative
16 pas égal à C'est une classe d'objets de fonction pour la comparaison de non-égalité
17 plus C'est une classe d'objets de fonction d'addition