函数指针类中的的迭代方法,示例。
阅读本文先阅读下两文:
http://blog.csdn.net/gubenpeiyuan/article/details/11193865
http://blog.csdn.net/gubenpeiyuan/article/details/11192583
阅读之后,给出一个函数运用实例。方式为定义一个函数指针类型,直接调用后,回调。
本例包含在类中,运用更加灵活,易维护。
#include <MiddleWare.hpp>
MiddleWare::MiddleWare()
{
AsyncwaitCommand("k1","k2",&MiddleWare::CheckWhatCommandIsIt);
}
MiddleWare::~MiddleWare()
{
}
void MiddleWare::InitMsg(Msg *msg)
{
}
void MiddleWare::AsyncwaitCommand(const char* Participant,const char *Topic, CheckCmdFun fun)
{
MsgSeq msgList;
(this->*fun)(&msgList,&MiddleWare::AckControllerComand);
}
void MiddleWare::CheckWhatCommandIsIt(MsgSeq *msgList,AckFun fun)
{
Msg msg;
(this->*fun)(&msg);
}
void MiddleWare::AckControllerComand(Msg *msg)
{
msg->Center_AntennaCompenstaionParameterTable.Chosen = 1 ;
printf("Iter Done\n");
}
#include <CmdCenter.hpp>
class MiddleWare;
typedef void (MiddleWare::*AckFun)(Msg *msg);
typedef void (MiddleWare::*CheckCmdFun)(MsgSeq *msgList,AckFun fun);
class MiddleWare{
public:
MiddleWare();
~MiddleWare();
void InitMsg(Msg *msg);
void AsyncwaitCommand(const char* Participant,const char *Topic, CheckCmdFun fun);
void CheckWhatCommandIsIt(MsgSeq *msgList,AckFun fun);
void AckControllerComand(Msg *msg);
private:
Msg msg ;
protected:
};
更简单明了的运用,
class A
{
public:
void out()
{
cout << "A here " << endl;
}
};
void callOut( A*a, void (A::*callback)() )
{
(a->*callback)();
}
int main(int argc, char **argv)
{
A* a = new A;
callOut( a, &A::out );
return 0 ;
}
这种方法,你在使用大工程和大项目的时候,会发现使用起来十分方便流畅,学习一下吧,呵呵,函数指针就是这么灵活。这么高效,!