zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    博客园CSS备份5
    博客园界面自定义教程
    awk 入门教程(阮一峰)
    批量检查cksum是否一致
    linux文件批量重命名
    cipher block
    riscv-gdbserver
    rsa_gmp
    asic
    video
  • 原文地址:https://www.cnblogs.com/hzijone/p/5416425.html
Copyright © 2011-2022 走看看