Функция ptr_fun
Шаблонные вспомогательной функции, используемые для преобразования и унарные бинарные указателей функций, соответственно, в унарные и бинарные способные к адаптации функции.
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));
Параметры
- _pfunc
Унарный или бинарный указатель функции, в который выполняется преобразование способной к адаптации функции.
Возвращаемое значение
Первая шаблонная функция возвращает унарная функция pointer_to_unary_function <Arg, Результат>(*_pfunc).
Вторая шаблонная функция возвращает бинарная функцию pointer_to_binary_function <Arg1, Arg2, Результат>(*_pfunc).
Заметки
Указатель на функцию объект функции и может быть передан в любой алгоритма стандартной библиотеки шаблонов, ожидает функции в качестве параметра, но не поддерживает к адаптации. Чтобы использовать ключевое переходникой, например привязка значения в него или использовать их с negator, его следует указывать с вложенными типами, которые делают возможным такое адаптацию. Преобразование унарных и бинарных указателей функций вспомогательной функцией ptr_fun позволяет переходники функции для работы с унарными и бинарными указателями функций.
Пример
// 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;
}
}
Output
Original sequence contains: Open up the opalescent gates
Found a match: opalescent
Требования
Заголовок: <functional>
Пространство имен: std