Какой из вариантов более пацанский
//**************Вариант 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*****************