template 的使用

hali999 2009-09-07 02:36:56
我定义和实现了一个模板类
仿写的(编译通过)
template <class T>
class Queue
{
private:
int front, rear, count; //队头指针、队尾指针、元素个数
T qlist[MaxQSize]; //队列元素数组

public:
Queue (void); //构造函数,初始化队头指针、队尾指针、元素个数
void QInsert(const T& item); //新元素入队
T QDelete(void); //元素出队
void ClearQueue(void); //清空队列

T QFront(void) const; //访问队首元素

// 测试队列状态
int QLength(void) const; //求队列长度(元素个数)
int QEmpty(void) const; //判队队列空否
int QFull(void) const; //判断队列满否
};

// 构造函数,初始化队头指针、队尾指针、元素个数
template <class T>
Queue<T>::Queue (void) : front(0), rear(0), count(0)
{}

template <class T>
void Queue<T>::QInsert (const T& item) //向队尾插入元素(入队)
{
if (count == MaxQSize) // 如果队满,中止程序
{
std::cerr << "Queue overflow!" << endl;
exit(1);
}
count++; //元素个数增1
qlist[rear] = item; //向队尾插入元素
rear = (rear+1) % MaxQSize; //队尾指针增1,用取余运算实现循环队列
}

template <class T>
T Queue<T>::QDelete(void) //删除队首元素,并返回该元素的值(出队)
{
T temp;
if (count == 0) // 如果队空,中止程序
{
std::cerr << "Deleting from an empty queue!" << endl;
exit(1);
}
temp = qlist[front]; // 记录队首元素值
count--; // 元素个数自减
front = (front+1) % MaxQSize; //队首指针增1。取余以实现循环队列
return temp; //返回首元素值
}
我的问题是
我在我的应用程序里面对于一个BYTE *BUF;如何调用这个init QInsert QDelete???????????????
这个写法该怎么写?

Queue<BYTE *>::Queue (void)

Queue<BYTE *>::QDelete(void)????????????????
而且buf = (BYTE *)malloc(4096);

很感谢
写一句就好了
我老是写不对。。。对模板理解 不深。。。


...全文
864 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hali999 2009-09-08
  • 打赏
  • 举报
回复
为什么还要带参数 我只要一个 T为 BYTE* 的队列不久OK了么
cphj 2009-09-08
  • 打赏
  • 举报
回复
因为你的目的有歧义

如果你是希望Queue存储一队BYTE*指针,那么Queue<BYTE *> q;就可以工作

而我当时理解你是要用自己分配的buf内存来存储Queue的元素
buf = (BYTE *)malloc(4096);
如果是这样的话,需要用buf来构建Queue,就需要那样了


cphj 2009-09-07
  • 打赏
  • 举报
回复
你这不光是模板的问题,首先要搞清楚构造函数的机制

构造函数不是写代码显式调用的,而是定义对象时编译器自动调用

另外,如果需要通过某种参数初始化对象,则需要写一个带参构造器

模板的问题是,你在实例化模板时,需要给出T的实际类型


template <class T>
Queue <T>::Queue (BYTE * p)
{
//你需要实现这个带参构造器
}

buf = (BYTE *)malloc(4096);
Queue<double> q(buf); //你要确定容器中装什么类型的数据,这里假设你要装double型的数据
q.QDelete();


hali999 2009-09-07
  • 打赏
  • 举报
回复
恩谢谢!
xylicon 2009-09-07
  • 打赏
  • 举报
回复
Queue<BYTE> q; // 定义一个对象。
q.QDelete(); // 通过对象调用函数。

16,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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