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 @   cogitoergosum  阅读(1198)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示