C ++ std_function

C ++ std_function

W C ++ STD oznacza standard. C ++ może mieć zdefiniowaną klasę, z której obiekty są tworzone. Normalna funkcja zdefiniowana jest jak klasa. Wywołanie funkcji jest jak obiekt do zdefiniowanej klasy funkcji. Wywołanie funkcji, w różnych momentach, z różnymi argumentami, jest jak różne obiekty funkcyjne. Teraz C ++ ma predefiniowane klasy funkcji, w których różne obiekty funkcyjne można oficjalnie utworzyć. Można również użyć obiektu funkcyjnego jako wywołania funkcji. Może to być argument funkcji zwrotnej w innym wywołaniu funkcji. Obiekt funkcyjny może zająć miejsce wskaźnika do normalnej funkcji.

STD :: jest deklaracją prototypową funkcji o nazwie, funkcja () w nagłówku biblioteki. Oznacza to, że aby użyć std :: funkcja, lub nagłówek musi zostać włączony do programu. STD :: to także opakowanie, które przyjmuje obiekt funkcji jako argument, aby stworzyć inny obiekt funkcji.

W tym artykule wyjaśnia C ++ STD :: Funkcja, zaczynając od niektórych predefiniowanych klas funkcji.

Treść artykułu

- Niektóre predefiniowane klasy funkcyjne

- STD :: Transform

- std :: funkcja właściwa

- Wniosek

Niektóre predefiniowane klasy funkcyjne

Funkcjonalny nagłówek ma wiele predefiniowanych prototypów klasy funkcji, w kategoriach referencyjnych operatorów arytmetycznych, porównań, klasy_three_way, operacje logiczne, operacje bitowe, wiązanie, opakowania funkcji polimorficznych, wyszukiwarki i szablony klas.

W kategorii arytmetycznej dwa prototypy klasy funkcji to:

szablon struktura neguj;
I
szablon struct plus;

Uwaga: struktura to rodzaj klasy. Pierwszy z zaprzestania liczb na liście. Drugi dodałby odpowiednie liczby dwóch list razem, co daje jedną listę dodatków.

STD :: Transform

Istnieje funkcja STD :: transform () w bibliotece algorytmu. Ta funkcja wzięłaby początek i koniec wektora i użyłby obiektu funkcji negowania, aby negować wszystkie elementy wektora. Obiekt funkcji negacji jest ostatnim argumentem wywołania funkcji transformacji. Prototyp (składnia) to:

szablon
Constexpr Outputiterator Transform (Inputiterator First1, Inputiterator Last1,
Wynik wyjściowy, OP);

gdzie wyjście jest drugim wektorem dla powstałych liczb negowanych. Outputiterator jest również zwracany.

Poniższy program pokazuje użycie składni:

#włączać
#włączać
#włączać
#włączać
za pomocą przestrzeni nazw Std;
wektor vtr1 = 1, 2, 3, 4, 5;
VectorVtrout (5);
int main ()

transformacja (VTR1.początek (), vtr1.end (), vtrout.początek (), negate ());
dla (int i = 0; iCout<Cout<powrót 0;

Wyjście to:

-1 -2-3-4 -5

Dyrektywy obejmują nagłówki iostream, algorytm, funkcjonalne i wektorowe nagłówki. Standardowa przestrzeń nazw jest używana. Wektory wejściowe i wyjściowe są tego samego rozmiaru. Funkcja std :: transform () jest używana bez, zwracając, ponieważ element powrotu jest argumentem funkcji transformacji. For pętka drukuje negowane liczby na wyjściu. Pozycja powrotu dla funkcji transformacji zostałaby zakodowana w następujący sposób:

Vtrout.początek () = transformuj (vtr1.początek (), vtr1.end (), vtrout.początek (), neguj());

W formie przeciążonej funkcja transformacji () wzięłaby początek i koniec jednego wektora. Następnie początek innego wektora i użyj obiektu funkcji plus, aby dodać odpowiednie liczby dwóch wektorów, aby mieć nowy wektor z sumami. Obiekt funkcji plus jest ostatnim argumentem wywołania funkcji transformacji, w tym celu. Prototyp (składnia) to:

szablonKlasa Outputiterator, klasa Binaryoperacja>
Constexpr Outputiterator Transform (Inputiterator1 First1, Inputiterator1 Last1,
Inputiterator2 First2, wynik wyjściowy, binaria -binary_op);

gdzie wyjście jest trzeci wektorze dla uzyskanych liczb sum. Outputiterator jest również zwracany, ale nie trzeba tego wdrażać. Zobacz następujący program:

#włączać
#włączać
#włączać
#włączać
za pomocą przestrzeni nazw Std;
wektor vtr1 = 1, 2, 3, 4, 5;
wektor vtr2 = 10, 20, 30, 40, 50;
VectorVtrout (5);
int main ()

transformacja (VTR1.początek (), vtr1.end (), vtr2.początek (), vtrout.początek (), plus ());
dla (int i = 0; iCout<Cout<powrót 0;

Wyjście to:

11 22 33 44 55

Dyrektywy obejmują nagłówki iostream, algorytm, funkcjonalne i wektorowe nagłówki. Standardowa przestrzeń nazw jest używana. Dwa wektory wejściowe i jeden wyjściowy są tego samego rozmiaru. Funkcja std :: transform () jest używana bez, zwracając, ponieważ element powrotu jest argumentem funkcji transformacji. For pętka drukuje sumowane liczby na wyjściu.

std :: funkcja właściwa

Wszystkie powyższe wyjaśniło, jak profesjonalnie używać obiektu funkcyjnego. Programator może napisać własną funkcję, taką jak funkcja transformacji () i użyć własnego obiektu funkcji, który napisał.

STD :: Funkcja to nie jest wielka sprawa. Jest to opakowanie, które przyjąłby dowolny obiekt funkcji jako argument. W tej sekcji artykułu ilustruje, jak utworzyć prosty obiekt funkcji i zapakować go w STD :: Funkcja.

Obiekt funkcyjny jest obiektem, którym można się nazwać. Obiekt nazywany to dowolny obiekt, którego można używać jak funkcja. Przykład klasy funkcji, pokazano w następującym kodzie:

#włączać
#włączać
za pomocą przestrzeni nazw Std;
structffn
int operator () (int a, int b)
int c = a + b;
zwrot c;

;
Structfnfn

To jest najważniejsza część programu, pozbawiona tylko funkcji głównej C ++. Struktura jest jak klasa. Ten kod ma definicję struktury o nazwie structfn (równoważny nazwie klasowej). Struktura ma tylko jeden członek, który jest operatorem nawiasów. Operator jest nieco funkcją. Ta funkcja przyjmuje dwa liczby całkowite jako argumenty i zwraca kolejną liczbę całkowitą. Faktycznie zwraca sumę dwóch liczb całkowitych. Struct, structfn jest typem obiektu funkcji.

Instanowany obiekt struktury, structfn to fn. „Std :: Funkcja” to inny typ (klasa). Ostatnie stwierdzenie w powyższym kodzie instancja obiektu STD :: Where Std :: jest pomijany, ponieważ jest ono w „Używając przestrzeni nazw Std;”). Nazwa standardowego obiektu dla „std :: funkcja” to f. „F ()” jest konstruktorem obiektu. W tym przypadku jego jedynym argumentem jest FN, który jest obiektem klasy funkcji, structfn. To ostatnie stwierdzenie obejmuje obiekt funkcji.

Operator (funkcja) klasy funkcyjnej (struct) ma dwa argumenty typów int i int int. Zwraca kolejny int. Te charakterystyczne funkcje mogą być reprezentowane jako: int (int, int). Dlatego specjalizacja szablonu konstrukcji funkcji jest .

Składnia konstruktora funkcji, używana powyżej, to:

szablon funkcja klasowa;

Pozostała część programu to funkcja C ++ Main (). To jest:

int main ()

int z = f (2, 3);
Cout << z << endl;
powrót 0;

Wyjście to 5. F (2,3) zastosowano zamiast FN (2,3).

Zaletą STD :: Funkcja jest to, że może przyjmować dowolny obiekt funkcji, gdy argumenty i typ powrotu, pobranej funkcji, są znane.

Powyższy obiekt funkcji można zmodyfikować, aby był używany jako wywołanie wywoławcze funkcji plus, w wywołaniu funkcji transformacji.

Wniosek

Std :: Funkcja jest funkcjonalnym nagłówkiem, który musi zostać włączony do programu, aby można go było używać. Owija obiekt funkcyjny. Obiektem funkcyjnym musi być jego argument (konstrukcja Std :: Funkcja). Obiekt funkcyjny jest obiektem, którym można się nazwać. Obiekt nazywany to dowolny obiekt, którego można używać jak funkcja. Zaletą STD :: Funkcja jest to, że może podjąć dowolną funkcję, gdy argumenty i typ powrotu, pobranej funkcji, są znane.