以前学习过C++语法,知道C++接口父类为纯虚函数,子类实现纯虚函数,通过指向父类指针指向子类,从而实现对子类具体方法的调用。以前也实现过这样一些小例子,今天闲的无聊,看项目中的源码,感觉项目中的接口写法非常清晰。故将学习到的心得记录下来。
接口父类的声明:
class __DLL_EXPORT__ StepBase{
virtual ParamParser handle(ParamParser inputPar) = 0; //接口
}
多个子类的接口实现:
1、class __DLL_EXPORT__ EBankPay : public StepBase{public: EBankPay( ); EBankPay( Connection& conn ); ~EBankPay( );
public: ParamParser handle(ParamParser inputPar);};
2、class PointHdl : public StepBase{public: PointHdl( ); PointHdl( Connection& conn ); ~PointHdl( );
ParamParser handle(ParamParser inputPar);}
3、class __DLL_EXPORT__ NetBankPay : public StepBase{public: NetBankPay( ); NetBankPay( Connection& conn ); ~NetBankPay( );
public: ParamParser handle(ParamParser inputPar);};
接口的连接
StepBase* IStepBase = NULL;
ret = CreateStepProcessInterface(&IStepBase,pProcStepInst->HANDLER);//函数可以动态分配一个StepBase对象ParamParser parStep;parStep = IStepBase->handle(m_paramInputParser); //此处调用的handle方法由IStepBase指针具体指向的对象确定。
至此,一个C++接口模型已经建立。
下面模仿MFC的消息映射机制,建立表结构。
BEGIN_PROCSTEP_MAP() PROCSTEP_HANDLE(EBankPay, "EBankPay") PROCSTEP_HANDLE(NetBankPay, "NetBankPay") PROCSTEP_HANDLE(PointHdl, "PointHdl")END_PROCSTEP_MAP()
PROCSTEP_HANDLE的宏定义:
#define PROCSTEP_HANDLE(baseClass,HandleName) / if(strcmp(lpszInterfaceName,HandleName) == 0) / { / *pInterface = new baseClass; / ret = 0; / }else BEGIN_PROCSTEP_MAP()的宏定义:
__declspec(dllexport) int CreateStepProcessInterface(StepBase** pInterface ,const char * lpszInterfaceName )
以上的实现非常类似于MFC的消息映射机制,若要添加新的功能,只需要在MAP中增加一条记录即可。