模板类和非模板类的问题

版主大哥 2012-09-20 03:14:46
我有个想法:
将一个模板类内聚到一个非模板类中,应该如何实现?

比如,我有一个CQueueManager非模板类,类里面内聚一个queue<T>类型的成员变量,能不能实现?

也就是我调用时,pQueueManager可以管理不同类型的queue.

这会脑子短路了....
...全文
164 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mujiok2003 2012-09-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
好像解决了.分享出来..

C/C++ code

struct SQueueNode
{
CSRongContainerBase* s_pQueue;
char s_szQueueName[256];
SQueueNode* s_pNext;

SQueueNode()
{
s_pQueue = NULL;
……
[/Quote]

++
版主大哥 2012-09-20
  • 打赏
  • 举报
回复
好像解决了.分享出来..

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;
}

版主大哥 2012-09-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
一般的类里有一个c++的容器不是很正常的吗
[/Quote]
请弄明白我的意图,谢谢
版主大哥 2012-09-20
  • 打赏
  • 举报
回复
也就是定义CQueueManager类时
没有template<class T>

刚才试了下

class ContainerBase


template <class T>
class Queue : public ContainerBase
{
}

class CQueueManager
{
pubilc:
template <class T>
Queue<T> AllocQueue();
private:
ContainerBase* m_pQueueHead;
int m_nQueueCount;
}

貌似这样可以...
凌晨三点至今 2012-09-20
  • 打赏
  • 举报
回复
一般的类里有一个c++的容器不是很正常的吗
  • 打赏
  • 举报
回复
非模板的话 CQueueManager 的方法参数咋写?

64,644

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧