The Code is as follows:
//: PointerToMemberOperator. cpp
# Include <iostream>
Using namespace std;
Class Dog
{
Public:
Int run (int I) const
{
Cout <"run \ n ";
Return I;
}
Int eat (int I) const
{
Cout <"eat \ n ";
Return I;
}
Int sleep (int I) const
{
Cout <"ZZZ \ n ";
Return I;
}
Typedef int (Dog: * PMF) (int) const;
// Operator-> * must return an object
// That has an operator ():
Class FunctionObject
{
Dog * ptr;
PMF pmem;
Public:
// Save the object pointer and member pointer
FunctionObject (Dog * wp, PMF pmf)
: Ptr (wp), pmem (pmf)
{
Cout <"FunctionObject constructor \ n ";
}
// Make the call using the object pointer
// And member pointer
Int operator () (int I) const
{
Cout <"FunctionObject: operator () \ n ";
Return (ptr-> * pmem) (I); // Make the call
}
};
FunctionObject operator-> * (PMF pmf)
{
Cout <"operator-> *" <endl;
Return FunctionObject (this, pmf );
}
};
Int main (){
Dog w;
Dog: PMF pmf = & Dog: run;
Cout <(w-> * pmf) (1) <endl;
Pmf = & Dog: sleep;
Cout <(w-> * pmf) (2) <endl;
Pmf = & Dog: eat;
Cout <(w-> * pmf) (3) <endl;
}
From yucan1001