我写的第一个模板类
2004-11-12 13:49
381 查看
很简单的一个列表类,而且并不是很完善,仅限于在自己的程序中使用。有很多很基本的东西还没搞懂。不过我一直奇怪的是:我将这个类的声明和实现放在不同的文件中时(.h, .cpp),最后在引用用这个类的地方都会出现连接错误,无奈只能将声明和实现放在同一个文件中了(.h),模板类的编译和连接机制到底是怎样的呢?
#pragma once
template<typename NodeType>
class TQueue;
template <typename NodeType>
class QNode
template <typename NodeType>
class TQueue
template <typename NodeType>
TQueue<NodeType>::TQueue(void)
template <typename NodeType>
TQueue<NodeType>::~TQueue(void)
template <typename NodeType>
WORD TQueue <NodeType>::GetCount()
// Queue Behavior
template <typename NodeType>
NodeType * TQueue<NodeType>::PickHead()
template <typename NodeType>
void TQueue<NodeType>::AppendTail(NodeType * _newNode)
template <typename NodeType>
BOOL TQueue<NodeType>::IsEmpty()
// Sequence Visit
template <typename NodeType>
NodeType * TQueue<NodeType>::GetNextNode(HANDLE & hcur)
template <typename NodeType>
NodeType * TQueue<NodeType>::PickCurrentNode(HANDLE & hcur)
assert(hcur != NULL);
assert(_queueLen > 0);
QNode<NodeType> * tmpQNode = (QNode<NodeType>*)hcur;
NodeType * tmpNode = NULL;
if (tmpQNode->prevQNode == NULL) // is the head
_queueHead = tmpQNode->nextQNode;
else
tmpQNode->prevQNode->nextQNode = tmpQNode->nextQNode;
if (tmpQNode->nextQNode == NULL) // is the tail
_queueTail = tmpQNode->prevQNode;
else
tmpQNode->nextQNode->prevQNode = tmpQNode->prevQNode;
tmpNode = tmpQNode->node;
delete tmpQNode;
hcur = NULL;
return tmpNode;
}
#pragma once
template<typename NodeType>
class TQueue;
template <typename NodeType>
class QNode
template <typename NodeType>
class TQueue
template <typename NodeType>
TQueue<NodeType>::TQueue(void)
template <typename NodeType>
TQueue<NodeType>::~TQueue(void)
template <typename NodeType>
WORD TQueue <NodeType>::GetCount()
// Queue Behavior
template <typename NodeType>
NodeType * TQueue<NodeType>::PickHead()
template <typename NodeType>
void TQueue<NodeType>::AppendTail(NodeType * _newNode)
template <typename NodeType>
BOOL TQueue<NodeType>::IsEmpty()
// Sequence Visit
template <typename NodeType>
NodeType * TQueue<NodeType>::GetNextNode(HANDLE & hcur)
template <typename NodeType>
NodeType * TQueue<NodeType>::PickCurrentNode(HANDLE & hcur)
assert(hcur != NULL);
assert(_queueLen > 0);
QNode<NodeType> * tmpQNode = (QNode<NodeType>*)hcur;
NodeType * tmpNode = NULL;
if (tmpQNode->prevQNode == NULL) // is the head
_queueHead = tmpQNode->nextQNode;
else
tmpQNode->prevQNode->nextQNode = tmpQNode->nextQNode;
if (tmpQNode->nextQNode == NULL) // is the tail
_queueTail = tmpQNode->prevQNode;
else
tmpQNode->nextQNode->prevQNode = tmpQNode->prevQNode;
tmpNode = tmpQNode->node;
delete tmpQNode;
hcur = NULL;
return tmpNode;
}
相关文章推荐
- 高级 DAO 编程
- ado如何使用sql函数?
- 归来~
- pl/sql函数应用
- 学习单词“genuine”
- 用javascript判断窗口关闭事件
- Asp.Net Forums 2.0.1 内部开发版系统文件说明
- Java,UI,新天地.
- 深入剖析JSP和Servlet对中文的处理过程(zz)
- 东软,我把青春献给了你……
- 范型的转变
- 自己做“N合一”光盘
- 字母变形技巧(logo设计)
- 让Winrar自解压程序也来帮你下马
- JAVA代码编写的30条建议 (zz from chinaewolf Blog )
- 国内完全免费的电子书籍下载
- 生成在blog中高亮+行号显示java代码的perl代码
- 3D游戏引擎设计与实现(10)
- XML 对象反序列化也动态编译?
- 用匿名类引入Mock类