Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用头文件中的lambda定义优先级_队列_C++ - Fatal编程技术网

C++ 使用头文件中的lambda定义优先级_队列

C++ 使用头文件中的lambda定义优先级_队列,c++,C++,我有一个关于在头文件中定义priority\u队列指针并在源文件中初始化它的问题 头文件 std::priority_queue<std::shared_ptr<Process>, std::vector<std::shared_ptr<Process>>, ?> *readyQueue; auto readyQueueComparator = [](const std::shared_ptr<Process> &first,

我有一个关于在头文件中定义
priority\u队列
指针并在源文件中初始化它的问题

头文件

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)>;
std::优先级队列*readyQueue;
源文件

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)>;
auto-readyQueueComparator=[](常数std::shared\u ptr&first,常数std::shared\u ptr&second){
返回true;
};
readyQueue=新std::priority\u队列;
基本上,我想实现这样一种结构,但我不知道如何在这种格式的头文件中定义优先级队列


谢谢。

简单的回答是,不要使用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;

我不会在这里用lambda。我会写一个函子。如果可以的话,我也会避免使用全局变量。这在lambda中是不可能的,因为它的类型是未知的。另一方面,我不确定是否有理由在程序中使用指向priority_队列的指针。@SergeyA假设我不会使用指向priority_队列的指针,但我仍然希望它作为类中的成员变量。(我没有把整个代码都放进去,但ready_queue实际上是一个成员变量。)在这种情况下,我应该如何在头文件中定义优先级_queue?@MertAkozcan pointer note是一个旁注。实际的答案是,在定义lambda之前,不能使用lambda的类型。您可以使用答案中所示的函子。