///////////////////////////////////////////////////////////////// // invoker.cpp - defines class to wrap function pointers // // Exam4:Q3 // // Jim Fawcett, CSE687 - Object Oriented Design, Spring 05 // ///////////////////////////////////////////////////////////////// #include #include template class delegate { public: typedef R(*fPtr)(A); virtual ~delegate() {} void operator+=(fPtr fp) { fptr_ = fp; } R operator()(A a) { return fptr_(a); } private: fPtr fptr_; }; int trunc(double d) { return static_cast(d); } struct Args { int i; double d; }; void simulateArgs(Args& a) { std::cout << "\n 1st arg = " << a.i; std::cout << "\n 2nd arg = " << a.d; } void main() { delegate del; del += trunc; int r = del(3.5); std::cout << "\n received " << del(3.5) << " from invoker\n\n"; delegate rdel; rdel += simulateArgs; Args a = { -3, 3.1415927 }; rdel(a); std::cout << "\n\n"; }