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

 

posted @ 2016-04-21 12:22  cogitoergosum  阅读(1197)  评论(0编辑  收藏  举报