私は以下のようなスレッドセーフなキュークラスを持って、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_;
};
は今、私はこのキューは、リストを含むようにしたいです。
エラー1エラーC2993:私のようなエラーを得続ける、
template<typename std::list<Message*>> class CmdQ; CmdQ<std::list<Message*>>* msgListQ_;
しかし「のstd ::リスト<を
をClassB.h:だから、私は以下のように使用しました_Ty>」:非タイプ テンプレートパラメータのための違法なタイプ 『:CMDQ『: のための無効なテンプレート引数 『__formal』
エラー3エラーC2975』無名のパラメータ』、コンパイルティム期待電子定数式
私はテンプレートの種類がstd::list
を受け入れることはできませんが、リストへのポインタを受け入れ、そうもClassB.hに以下のように一覧表示するには、ポインタを使用してみましたということいくつかのドキュメントを参照:
template<typename std::list<Message*>*>
class CmdQ;
CmdQ<std::list<Message*>*>* msgListQ_;
しかし、私依然としてエラーに直面している。
何か助けていただければ幸いです。
ありがとうございます!
'std :: queue queue_;'は 'std :: queue
とにかく明示的なインスタンス化は必要ありません。テンプレートを使用して変数を宣言することができます。 – chris
@NathanOliver 'std :: queue