Сейчас глупый вопрос спрошу, только не обижайтесь
От: abrec Россия  
Дата: 20.01.09 09:55
Оценка:
Какой из вариантов более пацанский
//**************Вариант 1*****************
class ITransport
{
public:
    ITransport(){};
    ~ITransport(){};
    virtual Init() = 0;
    virtual SendRequest(const char* pDataBuf, long lDataSize) = 0;
    virtual GetReply(const char* pDataBuf, long& lDataSize) = 0;
};

class CTCPIPTransport : public ITransport
{
public:
    CTCPIPTransport(){};
    ~CTCPIPTransport(){};
    virtual Init(){/*инициализирем сокет и т.д. и т.п.*/};
    virtual SendRequest(const char* pDataBuf, long lDataSize){/*шлем данные в сокет*/};
    virtual GetReply(const char* pDataBuf, long& lDataSize){/*принимаем данные из сокета*/};
};

class CRS232Transport : public ITransport
{
public:
    CRS232Transport(){};
    ~CRS232Transport(){};
    virtual Init(){/*инициализирем порт и т.д. и т.п.*/};
    virtual SendRequest(const char* pDataBuf, long lDataSize){/*шлем данные в порт*/};
    virtual GetReply(const char* pDataBuf, long& lDataSize){/*принимаем данные из порта*/};
};

class CMegaData
{
private:
    ITransport* m_pTransport;
public:
    CMegaData() : m_pTransport(NULL){};
    ~CMegaData()
    {
        if(m_pTransport)
            delete m_pTransport;
    };
    long Init(long lTrasportType)
    {
        switch(lTrasportType)
        {
        case 1:
            m_pTransport = new CTCPIPTransport();
            break;
        case 2:
            m_pTransport = new CRS232Transport();
            break;
        default:
            return -1;
        }
        m_pTransport->Init();
        return 0;
    }
    long Work()
    {
        long lBufSize = 10;
        char szBuf[10] = {0};
        memset(szBuf, 2, 10);
        m_pTransport->SendRequest(szBuf, lBufSize);
        m_pTransport->GetReply(szBuf, lBufSize);
        return 0;
    }
};

//Где-то в системе
{
    CMegaData theMegaData;
    theMegaData.Init(1);
    theMegaData.Work();
}
//**************Вариант 1*****************

//**************Вариант 2*****************

class CTCPIPTransport
{
public:
    CTCPIPTransport(){};
    ~CTCPIPTransport(){};
    virtual Init(){/*инициализирем сокет и т.д. и т.п.*/};
    virtual SendRequest(const char* pDataBuf, long lDataSize){/*шлем данные в сокет*/};
    virtual GetReply(const char* pDataBuf, long& lDataSize){/*принимаем данные из сокета*/};
};

class CRS232Transport
{
public:
    CRS232Transport(){};
    ~CRS232Transport(){};
    virtual Init(){/*инициализирем порт и т.д. и т.п.*/};
    virtual SendRequest(const char* pDataBuf, long lDataSize){/*шлем данные в порт*/};
    virtual GetReply(const char* pDataBuf, long& lDataSize){/*принимаем данные из порта*/};
};

template< typename TTransport >
class CMegaData
{
private:
    TTransport m_transport;
public:
    CMegaData() {};
    ~CMegaData(){};
    long Init()
    {
        m_transport.Init();
        return 0;
    }
    long Work()
    {
        long lBufSize = 10;
        char szBuf[10] = {0};
        memset(szBuf, 2, 10);
        m_transport.SendRequest(szBuf, lBufSize);
        m_transport.GetReply(szBuf, lBufSize);
        return 0;
    }
};

//Где-то в системе
{
    CMegaData< CTCPIPTransport > theMegaData;
    theMegaData.Init();
    theMegaData.Work();
}

//**************Вариант 2*****************
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.