在头文件中使用lambda定义priority_queue

时间:2018-11-19 21:21:45

标签: c++

我对在头文件中定义priority_queue指针并在源文件中对其进行初始化有疑问。

头文件

std::priority_queue<std::shared_ptr<Process>, std::vector<std::shared_ptr<Process>>, ?> *readyQueue;

源文件

auto readyQueueComparator = [](const std::shared_ptr<Process> &first, const std::shared_ptr<Process> &second) {
        return true;
    };
readyQueue = new std::priority_queue<std::shared_ptr<Process>, std::vector<std::shared_ptr<Process>>, decltype(readyQueueComparator)>;

基本上,我想实现这样的结构,但是我不知道如何在头文件中以这种格式定义优先级队列。

谢谢。

1 个答案:

答案 0 :(得分:3)

最简单的答案是不要为此使用lambda。而是定义一个自定义可调用类型。例如:

struct OrderByProcessPriority
{
  bool operator()(
    std::shared_ptr<Process> const& first,
    std::shared_ptr<Process> const& second) const;
}

using ProcessQueue = std::priority_queue<
  std::shared_ptr<Process>,
  std::vector<std::shared_ptr<Process>>,
  OrderByProcessPriority>;

ProcessQueue *readyQueue;

然后,在您的cpp文件中,创建如下实例:

readyQueue = new ProcessQueue{};