发布网友 发布时间:2022-06-05 20:00
共1个回答
热心网友 时间:2022-07-12 04:04
#include <stdio.h>
class CFuncPointer;
typedef void (CFuncPointer:: *pcfunc)(int,int);
typedef void (*pcstaticfunc)(int,int);
class CFuncPointer
{
public:
void Bind(pcfunc func)
{
m_runFunc = func;
}
void BindStatic(pcstaticfunc func)
{
m_staticFunc = func;
}
void pa(int x, int y)
{
printf(<CFuncPointer>[pa_]%d, %d\n, x, y);
}
void pb(int x, int y)
{
printf(<CFuncPointer>[pb__]%d, %d\n, x, y);
}
void pc(int x, int y)
{
printf(<CFuncPointer>[pc___]%d, %d\n, x, y);
}
static void pstatica(int x, int y)
{
printf(<CFuncPointer>[statica_]%d, %d\n, x, y);
}
static void pstaticb(int x, int y)
{
printf(<CFuncPointer>[staticb__]%d, %d\n, x, y);
}
void worker()
{
(this->*m_runFunc)(1, 2);
}
void sworker()
{
(*m_staticFunc)(1, 2);
}
private:
pcfunc m_runFunc;
pcstaticfunc m_staticFunc;
};
int main(int argc, char* argv[])
{
CFuncPointer *pclPoint=new CFuncPointer();
pclPoint->Bind(&CFuncPointer::pa);
pclPoint->worker();
pclPoint->Bind(&CFuncPointer::pb);
pclPoint->worker();
pclPoint->Bind(&CFuncPointer::pc);
pclPoint->worker();
pclPoint->BindStatic(CFuncPointer::pstatica);
pclPoint->sworker();
pclPoint->BindStatic(CFuncPointer::pstaticb);
pclPoint->sworker();
delete pclPoint;
return 0;
}
输出结果:
<CFuncPointer>[pa_]1, 2
<CFuncPointer>[pb__]1, 2
<CFuncPointer>[pc___]1, 2
<CFuncPointer>[statica_]1, 2
<CFuncPointer>[staticb__]1, 2