//wrapped1.cpp -- using a function wrapper as an argument #include #include #include using namespace std; template T use_f(T v, F f) { static int count = 0; count++; cout << " use_f count = " << count << ", &count = " << &count << endl; return f(v); } class Fp { private: double z_; public: Fp(double z = 1.0) : z_(z) {} double operator()(double p) { return z_*p; } }; class Fq { private: double z_; public: Fq(double z = 1.0) : z_(z) {} double operator()(double q) { return z_+ q; } }; double dub(double x) {return 2.0*x;} int main() { double y = 1.21; function ef1 = dub; function ef2 = sqrt; function ef3 = Fq(10.0); function ef4 = Fp(10.0); function ef5 = [](double u) {return u*u;}; function ef6 = [](double u) {return u+u/2.0;}; cout << "Function pointer dub:\n"; cout << " " << use_f(y, ef1) << endl; cout << "Function pointer sqrt:\n"; cout << " " << use_f(y, ef2) << endl; cout << "Function object Fp:\n"; cout << " " << use_f(y, ef3) << endl; cout << "Function object Fq:\n"; cout << " " << use_f(y, ef4) << endl; cout << "Lambda expression 1:\n"; cout << " " << use_f(y, ef5) << endl; cout << "Lambda expression 2:\n"; cout << " " << use_f(y,ef6) << endl; // cin.get(); return 0; }