64,646
社区成员
发帖
与我相关
我的任务
分享
class CMessage
{
public:
void ProcessProdID()
{
ProcessProdID_Helper();
}
int m_nMessageId;
protected:
virtual void ProcessProdID_Helper() = 0;
};
class CAuthMsg : public CMessage
{
public:
int m_nProdId;
private:
virtual void ProcessProdID_Helper()
{
printf("CAuthMsg Proecess m_nProdId\n");
}
};
class CTrafficAccoutMsg : public CMessage
{
public:
int m_nProdId;
private:
virtual void ProcessProdID_Helper()
{
printf("CTrafficAccoutMsg Proecess m_nProdId\n");
}
};
class CProcessMsg
{
public:
void processMsg(CMessage *pMsg)
{
// 通用处理m_ProdId????
pMsg->ProcessProdID();
}
};
#include <iostream>
using namespace std;
class CMessage
{
public:
int m_nMessageId;
virtual void processMsg() = 0;
};
class CAuthMsg : public CMessage
{
public:
int m_nProdId;
void processMsg()
{
cout <<"auth<<"<<endl;
}
};
class CTrafficAccoutMsg : public CMessage
{
public:
int m_nProdId;
void processMsg()
{
cout <<"traffic<<"<<endl;
}
};
class CProcessMsg
{
public:
void processMsg(CMessage *pMsg)
{
pMsg->processMsg();
}
};
int main(int argc ,char*argv[])
{
CTrafficAccoutMsg tm;
CAuthMsg am;
CProcessMsg cpm;
cpm.processMsg(&tm);
cpm.processMsg(&am);
return 0;
}
if ( typeid(tmp) == typeid(CTrafficAccoutMsg) )
{
//received a CTrafficAccoutMsg object;
}
else
{
//not a CTrafficAccoutMsg object, is a CAuthMsg object;
}
class IMessage
{
public:
virtual void ProcessProdID() = 0;
};
template<typename T>
class CMessage : public IMessage
{
public:
void ProcessProdID()
{
T *pT = static_cast<T*>(this);
pT->m_nProdId = 8;
}
int m_nMessageId;
};
class CAuthMsg : public CMessage<CAuthMsg>
{
public:
int m_nProdId;
};
class CTrafficAccoutMsg : public CMessage<CTrafficAccoutMsg>
{
public:
int m_nProdId;
};
class CProcessMsg
{
public:
void processMsg(IMessage *pMsg)
{
// ....lz自己想干嘛干嘛
// 通用处理m_ProdId????
pMsg->ProcessProdID();
}
};
void main()
{
CTrafficAccoutMsg tm;
CAuthMsg am;
CProcessMsg cpm;
cpm.processMsg(&tm);
cpm.processMsg(&am);
}
void CProcessMsg::processMsg(CMessage *pMessage)
{
CMessage* pMessage = 0;
switch (pMessage- >m_nMessageId)
{
case ID_Auth:
CAuthMsg *pMsg = new CAuthMsg;
pMessage = pMsg;
break;
case ID_TrafficAccout:
CTrafficAccoutMsg *pMsg = new CTrafficAccoutMsg;
pMessage = pMsg;
break;
default:
break;
}
pMessage->m_nProdId = 8;
}