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