Как переопределить некоторые функции в объекте очереди STL? - PullRequest
1 голос
/ 25 сентября 2011

Я пытаюсь переопределить функции push и pop из очереди STL.Я думаю, что мне нужно использовать шаблоны.Я получаю «MyQueue» не с именем типа (эта ошибка в моем файле main.cpp) и с ошибкой, сообщающей об ожидаемом инициализаторе перед маркером «<».Вот фрагмент кода: </p>

#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 Ответ

4 голосов
/ 25 сентября 2011

Вы не можете переопределить функции, которые не определены как виртуальные. Таким образом, вы ничего не получите, публично наследуя от std :: queue.

Было бы лучше, если бы MyQueue сохранил элемент, который был std::queue. Таким образом, вы можете делать все, что захотите, и просто перенаправлять функции члену std::queue.

Также в C ++ нет ключевого слова super; это Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...