C++闭源接口的二次封装

Posted 华仔Ivan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++闭源接口的二次封装相关的知识,希望对你有一定的参考价值。

dofun no para
D::funC3 no para
dofun,a=10
D::funC3,a=10
#include "stdafx.h"
#include <stdlib.h>

struct A

    virtual void funA1()=NULL;
    virtual void funA2()=NULL;
;

struct B:A

    virtual void funB1() = NULL;
    virtual void funB2() = NULL;
;

struct C:B

    virtual void funC1() = NULL;
    virtual void funC2() = NULL;
    virtual void funC3() = NULL;
    virtual void funC3(int a) = NULL;
;

struct D :C

    virtual void funA1() printf("%s\\n", __FUNCTION__); ;
    virtual void funA2() printf("%s\\n", __FUNCTION__); ;
    virtual void funB1() printf("%s\\n", __FUNCTION__); ;
    virtual void funB2() printf("%s\\n", __FUNCTION__); ;
    virtual void funC1() printf("%s\\n", __FUNCTION__); ;
    virtual void funC2() printf("%s\\n", __FUNCTION__); ;
    virtual void funC3() printf("%s no para\\n", __FUNCTION__); ;
    virtual void funC3(int a) printf("%s,a=%d\\n", __FUNCTION__,a); ;
;

// C++闭源接口的二次封装
template<class T>
void dofun(T *obp, void(T::*p)())

    printf("%s no para\\n", __FUNCTION__);
    (obp->*p)();

template<class T>
void dofun(T *obp, int a, void(T::*p)(int))

    printf("%s,a=%d\\n", __FUNCTION__,a);
    (obp->*p)(a);

int _tmain(int argc, _TCHAR* argv[])

    C* d=new D;
    //d->funC3();
    //d->funC3(10);
    dofun(d, &C::funC3);
    dofun(d, 10, &C::funC3);

    delete d;
    d = NULL;

    system("pause");
    return 0;

应用例子:
    //登录完成
    CMD_GP_LogonFinish LogonFinish;
    ZeroMemory(&LogonFinish,sizeof(LogonFinish));
    LogonFinish.wIntermitTime=m_pInitParameter->m_wIntermitTime;
    LogonFinish.wOnLineCountTime=m_pInitParameter->m_wOnLineCountTime;
    //m_pITCPNetworkEngine->SendData(dwContextID,MDM_GP_LOGON,SUB_GP_LOGON_FINISH,&LogonFinish,sizeof(LogonFinish));
    doSendData(m_pITCPNetworkEngine,&ITCPNetworkEngine::SendData,dwContextID,MDM_GP_LOGON,SUB_GP_LOGON_FINISH,&LogonFinish,sizeof(LogonFinish));

// C++闭源接口的二次封装
template<class T>
bool doSendData(T *obp,bool(T::*p)(DWORD, WORD, WORD),DWORD dwSocketID, WORD wMainCmdID, WORD wSubCmdID)

    bool bret=(obp->*p)(dwSocketID, wMainCmdID, wSubCmdID);
    //构造提示
    TCHAR szDescribe[128]=TEXT("");
    _sntprintf(szDescribe,CountArray(szDescribe),TEXT("bret=%d,wMainCmdID=%d,wSubCmdID=%d,dwSocketID=%d"),
        bret,wMainCmdID,wSubCmdID,dwSocketID);

    //提示消息
    CTraceService::TraceString(szDescribe,TraceLevel_Normal);  
    return bret;

template<class T>
bool doSendData(T *obp, bool(T::*p)(DWORD, WORD, WORD, VOID *, WORD), DWORD dwSocketID, WORD wMainCmdID, WORD wSubCmdID, VOID * pData, WORD wDataSize)
 
    bool bret=(obp->*p)(dwSocketID, wMainCmdID, wSubCmdID, pData,wDataSize);
    //构造提示
    TCHAR szDescribe[128]=TEXT("");
    _sntprintf(szDescribe,CountArray(szDescribe),TEXT("bret=%d,wMainCmdID=%d,wSubCmdID=%d,wDataSize=%d,dwSocketID=%d"),
        bret,wMainCmdID,wSubCmdID,wDataSize,dwSocketID);

    //提示消息
    CTraceService::TraceString(szDescribe,TraceLevel_Normal);  
    return bret;

以上是关于C++闭源接口的二次封装的主要内容,如果未能解决你的问题,请参考以下文章

C++闭源接口的二次封装

C++闭源接口的二次封装

vue中axios的二次封装

vue中axios的二次封装——vue 封装axios详细步骤

iOS(Swift) 基于 Moya 的二次封装

yortus/asyncawait,tj/co 这两个 nodejs 库有何区别