Freigeben über


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

Siehe auch

Referenz

Standardvorlagenbibliothek