功能:在qtcreator上用模版的方式實現隊列數據格式存儲多樣化。spa
模版實現的兩種方式: code
一、模版的實現直接在頭文件裏聲明並定義,別的類經過#include"*.h"進行包含,則能夠實現調用該類並實例化。blog
二、能夠在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