Library: General utilities
Function
A function adaptor that creates a function object from a pointer to a function
#include <functional>
namespace std {
template<class Arg, class Result>
pointer_to_unary_function<Arg, Result>
ptr_fun(Result (*f)(Arg));
template<class Arg1, class Arg2, class Result>
pointer_to_binary_function<Arg1, Arg2, Result>
ptr_fun(Result (*x)(Arg1, Arg2));
}
The pointer_to_unary_function and pointer_to_binary_function classes encapsulate pointers to functions, and use operator() so that the resulting object serves as a function object for the function.
The ptr_fun() function is overloaded to create instances of pointer_to_unary_function or pointer_to_binary_function when included with the appropriate pointer to a function.
//
// pnt2fnct.cpp
//
#include <algorithm> // for copy, transform
#include <functional> // for ptr_fun
#include <iostream> // cout, endl
#include <iterator> // for ostream_iterator
#include <deque> // for deque
#include <vector> // for vector
int factorial (int x)
{
return x > 1 ? x * factorial (x - 1) : x;
}
int main ()
{
typedef std::deque<int, std::allocator<int> > Deque;
typedef std::vector<int, std::allocator<int> > Vector;
typedef std::ostream_iterator<int, char,
std::char_traits<char> >
Iter;
// Initialize a deque with an array of integers.
const Deque::value_type a[] = { 1, 2, 3, 4, 5, 6, 7 };
Deque d (a + 0, a + sizeof a / sizeof *a);
// Create an empty vector to store the factorials.
Vector v (Vector::size_type (7));
// Compute factorials of the contents of 'd' and
// store results in 'v'.
std::transform (d.begin (), d.end (), v.begin (),
std::ptr_fun (factorial));
// Print the results.
std::cout << "The following numbers: \n ";
std::copy (d.begin (), d.end (), Iter (std::cout," "));
std::cout << "\n\nHave the factorials: \n ";
std::copy (v.begin (), v.end (), Iter (std::cout, " "));
std::cout << std::endl;
return 0;
}
Program Output:
The following numbers:
1 2 3 4 5 6 7
Have the factorials:
1 2 6 24 120 720 5040
Function Objects, pointer_to_binary_function, pointer_to_unary_function, mem_fun
ISO/IEC 14882:1998 -- International Standard for Information Systems -- Programming Language C++, Section 20.3.7