我有一個線程安全的隊列類像下面,C++類模板類型的std ::名單
類CMDQ:
template <typename Q>
class CmdQ
{
public:
CmdQ() :
queue_(),
queueMutex_(){};
~CmdQ() {
while (!queue_.empty()) {
Q* element(std::move(this->queue_.front()));
this->queue_.pop();
delete element;
}
};
void push(Q* commands) {
std::unique_lock<std::mutex> lock(this->queueMutex_);
queue_.push(commands);
this->mutexCondition_.notify_all();
}
void pop() {
std::unique_lock<std::mutex> lock(this->queueMutex_);
while(this->queue_.empty())this->mutexCondition_.wait(lock);
Q* element(std::move(this->queue_.front()));
this->queue_.pop();
delete element;
}
Q* front() {
std::unique_lock<std::mutex> lock(this->queueMutex_);
while(this->queue_.empty())this->mutexCondition_.wait(lock); if (!queue_.empty()) {
return (queue_.front());
}
return NULL;
}
bool empty() {
std::unique_lock<std::mutex> lock(this->queueMutex_);
return queue_.empty();
}
void clear() {
std::unique_lock<std::mutex> lock(this->queueMutex_);
while (!queue_.empty()) {
Q* element(std::move(this->queue_.front()));
this->queue_.pop();
delete element;
}
}
unsigned int size() {
std::unique_lock<std::mutex> lock(this->queueMutex_);
return queue_.size();
}
private:
std::queue queue_;
std::mutex queueMutex_;
std::condition_variable mutexCondition_;
};
現在,我想這個隊列中包含列表。於是,我用如下:
ClassB.h:
template<typename std::list<Message*>>
class CmdQ;
CmdQ<std::list<Message*>>* msgListQ_;
不過,我不斷收到錯誤,如:
錯誤1錯誤C2993:「的std ::名單< _Ty>」:非法類型用於非類型 模板參數‘__formal’
錯誤3錯誤C2975:‘CMDQ’:用於 無效模板參數‘未命名參數’,預期編譯添Ë常量表達式
我提到的一些文件該模板類型不能接受std::list
,但會接受指針列表等也採用指針ClassB.h列出像下面的嘗試:
template<typename std::list<Message*>*>
class CmdQ;
CmdQ<std::list<Message*>*>* msgListQ_;
但我仍然面臨錯誤。
任何幫助表示讚賞。
謝謝!
不宜'的std ::隊列queue_;'是'的std ::隊列
無論如何,你不需要顯式實例。你可以使用模板來聲明你的變量。 – chris
@NathanOliver'的std ::隊列