// --------------------
// FunctionPointers.c++
// --------------------
#include <cassert> // assert
#include <iostream> // cout, endl
template <typename T>
T my_plus (T x, T y) {
return x + y;}
template <typename T>
T my_multiplies (T x, T y) {
return x * y;}
template <typename FP>
int f (const FP p, int i, int j) {
return p(i, j);}
int main () {
using namespace std;
cout << "FunctionPointers.c++" << endl;
assert(my_plus(2, 3) == 5);
assert(my_multiplies(2, 3) == 6);
{
int (*p) (int, int) = &my_plus;
assert((*p)(2, 3) == 5);
p = my_multiplies;
assert( p(2, 3) == 6);
}
typedef int (*IFP) (int, int);
{
IFP p = my_plus;
assert(p(2, 3) == 5);
p = &my_multiplies;
assert((*p)(2, 3) == 6);
}
assert(f(&my_plus<int>, 2, 3) == 5);
assert(f( my_plus<int>, 2, 3) == 5);
assert(f(&my_multiplies<int>, 2, 3) == 6);
assert(f( my_multiplies<int>, 2, 3) == 6);
{
IFP p = my_plus;
assert(f( p, 2, 3) == 5);
p = my_multiplies;
assert(f( p, 2, 3) == 6);
}
cout << "Done." << endl;
return 0;}
syntax highlighted by Code2HTML, v. 0.9.1