功能:在qtcreator上用模版的方式实现队列数据格式存储多样化。
模版实现的两种方式:
1、模版的实现直接在头文件里声明并定义,别的类通过#include"*.h"进行包含,则可以实现调用该类并实例化。
2、可以在cpp文件里直接定义模版的具体功能,别的类需要调用该类时,只能通过#include"*.cpp"文件, 如果以#include "*.h"方式,则会出错。
#ifndef TEMPLATERQUEUE_H
#define TEMPLATERQUEUE_H #include <QQueue>
#include <QMutex>
#include <QMutexLocker> template<class T>
class TemplateRQueue
{
public:
TemplateRQueue();
bool setQueueData(const T tmp);
bool getQueueData(T *tmp);
int getQueueLength();
bool clearQueue();
private:
QQueue<T> *m_pRQueueData;
bool lockFlag;
QMutex m_mutex; }; template<class T>
TemplateRQueue<T>::TemplateRQueue()
{
m_pRQueueData = new QQueue<T>;
lockFlag = false;
} template<class T>
bool TemplateRQueue<T>::setQueueData(const T tmp)
{
QMutexLocker locker(&m_mutex); if(lockFlag == true)
return false;
else
{
lockFlag = true;
m_pRQueueData->enqueue(tmp);
lockFlag = false;
return true;
} } template<class T>
bool TemplateRQueue<T>::getQueueData(T *tmp)
{
QMutexLocker locker(&m_mutex);
if(lockFlag == true)
return false;
else
{
lockFlag = true;
if(m_pRQueueData->isEmpty())
{
lockFlag = false;
return false;
}
else
{
*tmp = m_pRQueueData->dequeue();
lockFlag = false;
return true;
} } } template<class T>
int TemplateRQueue<T>::getQueueLength()
{
QMutexLocker locker(&m_mutex); if(lockFlag == true)
return false;
else
{
return m_pRQueueData->length();
}
} template<class T>
bool TemplateRQueue<T>::clearQueue()
{
QMutexLocker locker(&m_mutex);
if(lockFlag == true)
return false;
else
{
m_pRQueueData->clear();
return true;
}
} #endif // TEMPLATERQUEUE_H