#include <iostream>
using namespace std;
class P
{
public:
P(int _m):m(_m){
}
virtual void print()
{
printf("P:%d\n",m);
}
int m;
};
class PP:public P
{
public:
PP(int _m):P(_m)
{
}
virtual void print()
{
printf("PP:%d\n",m);
}
};
template<class BB>
void Print(BB& pp,void (BB::*p)())
{
(pp.*p)();
}
template<class BB>
void Print(P& pp,void (P::*p)())
{
(pp.*p)();
}
int main(int argc, char *argv[])
{
P a(5);
PP aa(5);
void (P::*p)() =&P::print;
(a.*p)();
Print(a,&P::print);
Print(aa,&PP::print);
return 0;
}
using namespace std;
class P
{
public:
P(int _m):m(_m){
}
virtual void print()
{
printf("P:%d\n",m);
}
int m;
};
class PP:public P
{
public:
PP(int _m):P(_m)
{
}
virtual void print()
{
printf("PP:%d\n",m);
}
};
template<class BB>
void Print(BB& pp,void (BB::*p)())
{
(pp.*p)();
}
template<class BB>
void Print(P& pp,void (P::*p)())
{
(pp.*p)();
}
int main(int argc, char *argv[])
{
P a(5);
PP aa(5);
void (P::*p)() =&P::print;
(a.*p)();
Print(a,&P::print);
Print(aa,&PP::print);
return 0;
}