Listing 3: External member function object.

template <typename ReturnType, typename ClassType, typename ArgType>
class extern_mem_fun_t : 
public unary_function<ArgType, ReturnType>
{
  public :
  extern_mem_fun_t(
    ReturnType (ClassType::*p)(ArgType), ClassType* ob) : mf(p), pobj(ob)
  {}
  ReturnType operator() (ArgType item) 
  {
    return((pobj->*mf)(item));
  }
 private:
  ReturnType (ClassType::*mf)(ArgType);
  ClassType*   pobj;
};