64,644
社区成员
发帖
与我相关
我的任务
分享
struct SQueueNode
{
CSRongContainerBase* s_pQueue;
char s_szQueueName[256];
SQueueNode* s_pNext;
SQueueNode()
{
s_pQueue = NULL;
memset(s_szQueueName,0,256);
s_pNext = NULL;
}
~SQueueNode()
{
s_pQueue = NULL;
memset(s_szQueueName,0,256);
s_pNext = NULL;
}
};
class SRongQueueManager
{
public:
SRongQueueManager():m_pQueueHead(NULL),m_pQueueLast(NULL),m_nQueueNum(0)
{
}
template<class T>
SRongQueue<T>* AllocQueue(char* szQueueName);
private:
SQueueNode* m_pQueueHead;
SQueueNode* m_pQueueLast;
int m_nQueueNum;
};
template<class T>
SRongQueue<T>* SRongQueueManager::AllocQueue(char* szQueueName)
{
SRongQueue<T>* pRetQueue = NULL;
if (NULL == szQueueName)
{
return pRetQueue;
}
pRetQueue = new SRongQueue<T>;
if (NULL == pRetQueue)
{
return pRetQueue;
}
SQueueNode* l_pQueueNode = NULL;
l_pQueueNode = (SQueueNode*)malloc(sizeof(SQueueNode));
l_pQueueNode->s_pQueue = pRetQueue;
memcpy(l_pQueueNode->s_szQueueName,szQueueName,strlen(szQueueName) + 1);
l_pQueueNode->s_szQueueName[strlen(szQueueName)] = '\0';
l_pQueueNode->s_pNext = NULL;
if (NULL == m_pQueueHead)
{
m_pQueueHead = l_pQueueNode;
}
else
{
m_pQueueLast->s_pNext = l_pQueueNode;
}
m_pQueueLast = l_pQueueNode;
m_nQueueNum++;
return pRetQueue;
}
int _tmain(int argc, _TCHAR* argv[])
{
SRongQueueManager* pTest = new SRongQueueManager;
//CSRongContainerBase就是SRongQueue<T>的基类
SRongQueue<int>* pQueue_int = pTest->AllocQueue<int>("xihu");
return 0;
}