12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- //wrapped1.cpp -- using a function wrapper as an argument
- #include <iostream>
- #include <math.h>
- #include <functional>
- using namespace std;
- template <typename T, typename F>
- 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<double(double)> ef1 = dub;
- function<double(double)> ef2 = sqrt;
- function<double(double)> ef3 = Fq(10.0);
- function<double(double)> ef4 = Fp(10.0);
- function<double(double)> ef5 = [](double u) {return u*u;};
- function<double(double)> 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;
- }
|