Libreria C ++ - <funzionale>

introduzione

Gli oggetti funzione sono oggetti progettati specificamente per essere utilizzati con una sintassi simile a quella delle funzioni. Le istanze di std :: function possono archiviare, copiare e richiamare qualsiasi destinazione Callable: funzioni, espressioni lambda, espressioni di binding o altri oggetti funzione, nonché puntatori a funzioni membro e puntatori a membri dati.

Dichiarazione

Di seguito è riportata la dichiarazione per std :: function.

template<class >
class function;

C ++ 11

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

Parametri

  • R - tipo_risultato.

  • argument_type - T se sizeof ... (Args) == 1 e T è il primo e unico tipo in Args.

Esempio

Nell'esempio seguente per 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'output di esempio dovrebbe essere così:

-9
42
31337
314160
num_: 314159
314161
314162
18

Funzioni dei membri

Sr.No. Funzioni dei membri Definizione
1 (costruttore) Viene utilizzato per costruire una nuova istanza std :: function
2 (distruttore) Viene utilizzato per distruggere un'istanza std :: function
3 operatore = Viene utilizzato per assegnare un nuovo target
4 scambiare Viene utilizzato per scambiare i contenuti
5 assegnare Viene utilizzato per assegnare un nuovo target
6 operatore bool Viene utilizzato per verificare se è contenuto un obiettivo valido
7 operatore() Viene utilizzato per invocare il target

Funzioni non membro

Sr.No. Funzioni non membro Definizione
1 std :: swap È specializzato l'algoritmo std :: swap
2 operatore == operatore! = Confronta una funzione std :: con nullptr

Classi di operatori

Sr.No. Classi di operatori Definizione
1 bit_and È una classe di oggetti funzione AND bit per bit
2 bit_or È una classe di oggetti funzione OR bit per bit
3 bit_xor È una classe di oggetti funzione XOR bit per bit
3 divide È una classe di oggetti della funzione di divisione
4 uguale a È una classe di oggetti funzione per il confronto di uguaglianza
5 maggiore È una classe di oggetti funzione per il confronto di disuguaglianze maggiori
6 maggiore_uguale È una classe di oggetti funzione per il confronto maggiore o uguale a
7 Di meno È una classe di oggetti funzione per il confronto di disuguaglianze minori
8 less_equal È una classe di oggetti funzione per il confronto minore o uguale a
9 logico_and È una classe di oggetti funzione AND logica
10 logico_not È una classe di oggetti funzione NOT logica
11 logico_or È una classe di oggetti funzione OR logica
12 meno È una classe di oggetti della funzione di sottrazione
13 modulo È una classe di oggetti funzione modulo
14 si moltiplica È una classe di oggetti della funzione di moltiplicazione
15 negare È una classe di oggetti funzione negativa
16 not_equal_to È una classe di oggetti funzione per il confronto di non uguaglianza
17 più È una classe di oggetti funzione di addizione