ptr_fun, fonction

Fonctions template d'assistance utilisée pour convertir les pointeurs de fonctions unaires et binaires, respectivement, en des fonctions adaptables unaires et binaires.

template<class Arg, class Result> 
   pointer_to_unary_function<Arg, Result, Result (*)(Arg)> 
      ptr_fun(Result (*_pfunc)(Arg)); 
template<class Arg1, class Arg2, class Result> 
   pointer_to_binary_function<Arg1, Arg2, Result, Result (*)(Arg1, Arg2)> 
      ptr_fun(Result (*_pfunc)(Arg1, Arg2));

Paramètres

  • _pfunc
    Le pointeur fonction unaire ou binaire à convertir en une fonction adaptable.

Valeur de retour

La première fonction de modèle retourne la fonction unaire pointer_to_unary_function <Arg, Résultat>(*_pfunc).

La seconde fonction de modèle retourne la fonction binaire pointer_to_binary_function <Arg1, Arg2, Résultat>(*_pfunc).

Notes

Un pointeur fonction est une fonction objet et peut être passé à n'importe quel algorithme de la Standard Template Library qui attend une fonction comme paramètre, mais il n'est pas adaptable. À utiliser avec un adaptateur, par exemple lier une valeur à celui-ci ou l'utiliser avec un inverseur, il doit être fourni avec des types imbriqués qui rendent une telle adaptation possible. La conversion des pointeurs fonction unaires et binaires par la fonction d'assistance de ptr_fun autorise les adaptateurs de fonction à travailler avec les pointeurs fonction unaires et binaires.

Exemple

// functional_ptr_fun.cpp 
// compile with: /EHsc
#include <vector>
#include <algorithm>
#include <functional>
#include <cstring>
#include <iostream>

int main( )
{
    using namespace std;
    vector <char*> v1;
    vector <char*>::iterator Iter1, RIter;

    v1.push_back ( "Open" );
    v1.push_back ( "up" );
    v1.push_back ( "the" );
    v1.push_back ( "opalescent" );
    v1.push_back ( "gates" );

    cout << "Original sequence contains: " ;
    for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; ++Iter1 )
        cout << *Iter1 << " ";
    cout << endl;

    // To search the sequence for "opalescent" 
    // use a pointer_to_function conversion
    RIter = find_if( v1.begin( ), v1.end( ),
        not1 ( bind2nd (ptr_fun ( strcmp ), "opalescent" ) ) );

    if ( RIter != v1.end( ) )  
    {
        cout << "Found a match: " 
            << *RIter << endl;
    }
}

Sortie

Original sequence contains: Open up the opalescent gates
Found a match: opalescent

Configuration requise

En-tête : <functional>

Espace de noms : std

Voir aussi

Référence

Bibliothèque STL (Standard Template Library)