如何覆盖Queue STL对象中的某些函数?

时间:2011-09-24 21:24:41

标签: c++ templates stl

我试图覆盖STL队列中的推送和弹出功能。我想我需要使用模板。我得到一个'MyQueue'没有命名一个类型(这个错误在我的main.cpp文件中)和一个错误说''<'之前的预期初始化程序令牌。以下是代码片段:

#include "MyQueue.h"

sem_t EmptySem;
sem_t PresentSem;
sem_t mutex;

MyQueue::MyQueue()
{
    sem_init(&EmptySem, PTHREAD_PROCESS_SHARED, QSIZE);
    sem_init(&PresentSem, PTHREAD_PROCESS_SHARED, 0);
    sem_init(&mutex, PTHREAD_PROCESS_SHARED, 1);
}

template <class Elem>
void queue<Elem>::push(const Elem &Item)
{
    sem_wait(EmptySem);
    sem_wait(mutex);
    super.push(Item);
    sem_post(mutex);
    sem_post(PresentSem);
} 
template <class Elem>
Elem queue<Elem>::pop(void)
{
    Elem item;
    sem_wait(PresentSem);
    sem_wait(mutex);
    item = super.front();
    super.pop();
    signal(mutex);
    signal(EmptySem);
    return item;
}

谢谢!

1 个答案:

答案 0 :(得分:4)

您无法覆盖未定义为虚拟的功能。所以你通过公开继承std :: queue来获得任何收益。

如果MyQueue存储了std::queue的成员,那将是最佳选择。这样,您可以执行任何操作,只需将功能转发给std::queue成员。

此外,C ++没有关键字super;这是Java。