1*c87b03e5Sespie // Build don't link:
2*c87b03e5Sespie // GROUPS passed casts
3*c87b03e5Sespie class VObject;
4*c87b03e5Sespie 
5*c87b03e5Sespie typedef int boolean;
6*c87b03e5Sespie 
7*c87b03e5Sespie typedef boolean (VObject::*method)();
8*c87b03e5Sespie typedef boolean (VObject::*method0)();
9*c87b03e5Sespie typedef boolean (VObject::*method1)(long);
10*c87b03e5Sespie 
11*c87b03e5Sespie #define methodOf(o,m)  (method)(&o::m)
12*c87b03e5Sespie 
13*c87b03e5Sespie 
14*c87b03e5Sespie class VObject {
15*c87b03e5Sespie     public:
16*c87b03e5Sespie     boolean perform(method );
17*c87b03e5Sespie     boolean perform(method , long);
18*c87b03e5Sespie     void    affectMethod(method );
dummy()19*c87b03e5Sespie     void    dummy(){};
20*c87b03e5Sespie };
21*c87b03e5Sespie 
22*c87b03e5Sespie 
perform(method m)23*c87b03e5Sespie boolean VObject::perform(method m)
24*c87b03e5Sespie {
25*c87b03e5Sespie         method0 q = (method0)m;
26*c87b03e5Sespie         return(this->*q)();
27*c87b03e5Sespie }
28*c87b03e5Sespie 
29*c87b03e5Sespie 
perform(method m,long param)30*c87b03e5Sespie boolean VObject::perform(method m, long param)
31*c87b03e5Sespie {
32*c87b03e5Sespie         method1 q = (method1)m;
33*c87b03e5Sespie         return(this->*q)(param);
34*c87b03e5Sespie  }
35*c87b03e5Sespie 
affectMethod(method m)36*c87b03e5Sespie void VObject::affectMethod(method m)
37*c87b03e5Sespie {
38*c87b03e5Sespie         m =   methodOf(VObject, dummy);
39*c87b03e5Sespie }
40