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 |