C ++ std_function

C ++ std_function

En C ++, STD signifie standard. C ++ peut avoir une classe définie à partir de laquelle les objets sont instanciés. Une fonction définie normale, est comme une classe. L'appel de fonction est comme un objet à la classe de fonction définie. Un appel de fonction, à différents moments, avec différents arguments, est comme différents objets de fonction. Maintenant, C ++ a des classes de fonction prédéfinies où différents objets de fonction peuvent être officiellement instanciés. Un objet fonction peut également être utilisé, comme appel de fonction. Il peut s'agir d'un argument de fonction de rappel dans un autre appel de fonction. Un objet de fonction peut remplacer un pointeur vers une fonction normale.

La fonction std :: est une déclaration de prototype de fonction avec le nom, fonction () dans l'en-tête, de la bibliothèque. Cela signifie, pour utiliser la fonction std ::, l'en-tête ou doit être inclus dans le programme. La fonction std :: est également un wrapper qui prend un objet de fonction comme argument, pour produire un autre objet de fonction.

Cet article explique la fonction C ++ STD ::, en commençant par quelques classes de fonction prédéfinies.

Contenu de l'article

- Quelques classes de fonction prédéfinies

- std :: transform

- STD :: fonction propre

- Conclusion

Quelques classes de fonction prédéfinies

L'en-tête fonctionnel a de nombreux prototypes de classe de fonction prédéfinis, dans les catégories de, référence_wrapper, opérations arithmétiques, comparaisons, class compare_three_way, opérations logiques, opérations bitwise, liaison, lots de fonctions polymorphes, chercheurs et modèle de modèle de classe de classe.

Dans la catégorie arithmétique, deux des prototypes de classe de fonction sont:

modèle la structure nie;
et
modèle struct Plus;

Remarque: une structure est une sorte de classe. Le premier annulerait les nombres dans une liste. Le second ajouterait des nombres correspondants de deux listes ensemble, ce qui entraînerait une liste des ajouts.

std :: transform

Il y a la fonction std :: transform () dans la bibliothèque d'algorithme. Cette fonction prendrait le début et la fin d'un vecteur et utiliserait l'objet de fonction Nul à annuler tous les éléments du vecteur. L'objet de fonction NEGATE est le dernier argument de l'appel de fonction transform (). Un prototype (syntaxe) est:

modèle
CONSEXPR OutputIterator Transforator (Inputiterator First1, InputIterator Last1,
Résultat OutputIterator, UNAYOPERATION OP);

où OutputIterator est un deuxième vecteur pour les nombres niés résultants. Outporediterator est également retourné.

Le programme suivant montre l'utilisation de la syntaxe:

#inclure
#inclure
#inclure
#inclure
Utilisation de Namespace Std;
vecteur vtr1 = 1, 2, 3, 4, 5;
VectorVtrout (5);
int main()

Transformer (Vtr1.begin (), vtr1.end (), vtrout.begin (), nier ());
pour (int i = 0; icouter<couter<retour 0;

La sortie est:

-1 -2 -3 -4 -5

Les directives comprennent, iostream, algorithme, en-têtes fonctionnels et vectoriels. L'espace de noms standard est utilisé. Les vecteurs d'entrée et de sortie sont de la même taille. La fonction std :: transform () est utilisée sans, retour, car l'élément de retour est un argument de la fonction de transformation. La boucle for-imprime les nombres niés à la sortie. Un élément de retour pour la fonction de transformation aurait été codé comme suit:

vtrout.begin () = transform (vtr1.begin (), vtr1.end (), vtrout.begin (), nier());

Dans une forme surchargée, la fonction transform () prendrait le début et la fin d'un vecteur. Ensuite, le début d'un autre vecteur, et utilisez l'objet A Plus Function pour ajouter les nombres correspondants des deux vecteurs pour avoir un nouveau vecteur avec les sommes. L'objet de fonction plus, est le dernier argument de l'appel de la fonction de transformation, à cet effet. Le prototype (syntaxe) est:

modèleClass Outputiterator, Class BinaryOperation>
Consxpr OutputIterator transform (InputIterator1 First1, InputIterator1 Last1,
InputIterator2 First2, OutputIterator Result, BinaryOperation Binary_OP);

où OutputIterator est un troisième vecteur pour les nombres de somme résultants. Outporediterator est également retourné, mais cela ne doit pas être mis en œuvre. Voir le programme suivant:

#inclure
#inclure
#inclure
#inclure
Utilisation de Namespace Std;
vecteur vtr1 = 1, 2, 3, 4, 5;
vecteur vtr2 = 10, 20, 30, 40, 50;
VectorVtrout (5);
int main()

Transformer (Vtr1.begin (), vtr1.end (), vtr2.begin (), vtrout.begin (), plus ());
pour (int i = 0; icouter<couter<retour 0;

La sortie est:

11 22 33 44 55

Les directives comprennent, iostream, algorithme, en-têtes fonctionnels et vectoriels. L'espace de noms standard est utilisé. Les deux vecteurs d'entrée et un de sortie sont de la même taille. La fonction std :: transform () est utilisée sans, retour, car l'élément de retour est un argument de la fonction de transformation. La boucle for-imprime les nombres sommés à la sortie.

STD :: fonction propre

Tout ce qui précède a expliqué comment utiliser un objet de fonction, professionnellement. Il est possible pour le programmeur d'écrire sa propre fonction comme la fonction transform () et d'utiliser son propre objet de fonction qu'il a écrit.

STD :: La fonction n'est pas un gros problème. C'est un wrapper qui prendrait n'importe quel objet de fonction comme argument. Cette section de l'article illustre comment créer un objet de fonction simple et le faire envelopper dans la fonction std ::.

Un objet de fonction est un objet appelable. Un objet appelable est tout objet qui peut être utilisé comme une fonction. Un exemple de classe de fonction est illustré dans le code suivant:

#inclure
#inclure
Utilisation de Namespace Std;
struct structfn
int opérateur () (int a, int b)
int c = a + b;
Retour C;

;
Structfnfn

Ceci est la partie supérieure du programme, sans seulement la fonction principale C ++. Une structure est comme une classe. Ce code a la définition d'une structure, appelée structfn (équivalent à la classe de classe). La structure n'a qu'un seul membre, qui est l'opérateur parental. Un opérateur est quelque peu une fonction. Cette fonction prend deux entiers comme arguments et renvoie un autre entier. Il renvoie en fait la somme des deux entiers. La structure, structfn est un type d'objet fonction.

L'objet instancié de la structure, Structfn est fn. «STD :: fonction» lui-même, est un autre type (classe). La dernière instruction du code ci-dessus, instancie un objet de la fonction std :: (où std :: est omis car il est dans «Utilisation de namespace std» »). Le nom de l'objet standard pour «STD :: fonction», est f. «F ()» est un constructeur d'objets. Dans ce cas, son seul argument, est FN, qui est un objet de la classe de fonction, structfn. Cette dernière déclaration enveloppe l'objet de fonction.

L'opérateur (fonction) de la classe de fonction (struct), a deux arguments de types int et int. Il renvoie un autre int. Ces caractéristiques de signature peuvent être représentées comme: int (int, int). C'est pourquoi, la spécialisation du modèle, de la construction de fonctions, est .

La syntaxe du constructeur de fonction, utilisée ci-dessus, est:

modèle fonction de classe;

Le reste du programme est la fonction C ++ Main (). C'est:

int main()

int z = f (2, 3);
couter << z << endl;
retour 0;

La sortie est 5. F (2,3) a été utilisé à la place de FN (2,3).

L'avantage de la fonction std :: est qu'il peut prendre n'importe quel objet de fonction, une fois que les arguments et le type de retour, de la fonction prise, sont connus.

L'objet de fonction ci-dessus peut être modifié, à utiliser comme un rappel de fonction plus, dans l'appel de fonction de transformation.

Conclusion

La fonction std :: est de l'en-tête fonctionnel, qui doit être incluse dans le programme pour qu'il soit utilisé. Il enveloppe un objet de fonction. L'objet de fonction doit être son argument (de la construction de fonction std ::). Un objet de fonction est un objet appelable. Un objet appelable est tout objet qui peut être utilisé comme une fonction. L'avantage de la fonction std :: est qu'il peut prendre n'importe quelle fonction, une fois que les arguments et le type de retour, de la fonction pris, sont connus.