ptr_fun-Funktion
Hilfevorlagenfunktionen verwendet, um die unären und binären Funktionszeiger bzw. in die unären und binären anwendbaren Funktionen zu konvertieren.
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));
Parameter
- _pfunc
Der unäre oder binäre zu einer entsprechenden Funktion konvertiert werden, Funktionszeiger.
Rückgabewert
Die erste Vorlagenfunktion gibt die unären Funktion pointer_to_unary_function <Arg, Ergebnis zurück (>*_pfunc).
Die binäre Funktion pointer_to_binary_functionArg1, Arg2, <Ergebnis der zweiten Vorlagenfunktions-Rückgaben >(*_pfunc).
Hinweise
Ein Funktionszeiger ist ein Funktionsobjekt und zu jedem Standardvorlagenbibliotheksalgorithmus übergeben, der eine Funktion als Parameter erwartet, jedoch wird nicht angewendet. Um ihn mit einem Adapter, wie Binden eines Werts hinzufügen oder Verwendung mit einem Negator zu verwenden, muss er mit geschachtelten Typen angegeben werden die eine solche Anpassung ist. Die Konvertierung von unären und binären Funktionszeigern von der Hilfsfunktion ptr_fun ermöglicht die Funktionsadapter zur Arbeit mit den unären und binären Funktionszeiger.
Beispiel
// 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;
}
}
Ausgabe
Original sequence contains: Open up the opalescent gates
Found a match: opalescent
Anforderungen
Header: <functional>
Namespace: std