C++テンプレートコンテナキュー(コンテナをインスタンス化可能)
テンプレートコンテナキューを定義することを目的とし、コンテナはインスタンス化されていません(list,vector,deque)、コンテナに格納されているデータ型(int,string,struct...)もインスタンス化されます.デフォルトのコンテナはlistです.
テンプレートインタフェース
インスタンス化インタフェース
テンプレートインタフェース
#pragma once
#include
#include
#include
#include
// 、 ( list )
template >
class CQueMgr
{
private:
CONT elems;
TSem m_sem;
public:
CQueMgr();
virtual ~CQueMgr();
bool empty(void) const;
void push(T const &elem);
bool pop(T &elem);
};
template >
CQueMgr::CQueMgr()
{
m_sem = NewSemaphore(1);
}
template >
CQueMgr::~CQueMgr()
{
FreeSemaphore(m_sem);
}
template >
bool CQueMgr::empty(void) const
{
bool fEmpty;
WaitSemaphore(m_sem);
fEmpty = elems.empty();
SignalSemaphore(m_sem);
return fEmpty;
}
template >
void CQueMgr::push(T const &elem)
{
WaitSemaphore(m_sem);
elems.push_back(elem);
SignalSemaphore(m_sem);
}
template >
bool CQueMgr::pop(T &elem)
{
WaitSemaphore(m_sem);
if (!elems.empty())
{
elem = elems.front(); //
elems.pop_front(); //
SignalSemaphore(m_sem);
return true;
}
SignalSemaphore(m_sem);
return false;
}
インスタンス化インタフェース
#include
#include
void main()
{
// list , int
CQueMgr IntQueMgr;
// list , string
CQueMgr<:string> StringQueMgr;
// vector , string
CQueMgr<:string std::vector=""> > StringVectorQueMgr;
}