#include using namespace std; //it takes a "stateless functor class" template class UseUtil { public: UseUtil() { } int useCalculate(UtilFunctor calculate, int someVal) { return calculate(someVal); } }; //out of line way //int UseUtil::useCalculate( // UtilFunctor calculate, int someVal) //{ // return calculate(someVal); //} //first functor class class Cal1 { public: int operator()(int val) { return val*val; }; }; //second functor class class Cal2 { public: int operator()(int val) { return val+val; } }; int main() { Cal1 calObj1; UseUtil useUtilObj1; cout << "Using Cal1 = " << useUtilObj1.useCalculate(calObj1, 10) << "\n"; UseUtil useUtilObj2; Cal2 calObj2; cout << "Using Cal2 = " << useUtilObj2.useCalculate(calObj2, 10) << "\n"; return 0; }