【问题标题】:How do I override some functions in the Queue STL object?如何覆盖 Queue STL 对象中的某些函数?
【发布时间】:2011-09-24 21:24:40
【问题描述】:

我正在尝试覆盖 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;
}

谢谢!

【问题讨论】:

    标签: c++ templates stl


    【解决方案1】:

    您不能覆盖未定义为虚拟的函数。因此,通过从 std::queue 公开继承,您将一无所获。

    最好MyQueue 存储一个std::queue 成员。这样,您可以为所欲为,只需将函数转发给std::queue 成员。

    另外,C++ 没有关键字super;那是Java。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-15
      • 2020-04-21
      • 2021-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多