C++接口写法!!

    技术2022-05-19  21

    以前学习过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中增加一条记录即可。

     

     


    最新回复(0)