C++之通用队列模版
功能:在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