gpt4 book ai didi

c++ - 解决模板中的循环依赖

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:58:40 25 4
gpt4 key购买 nike

我正在尝试使用 Boost 实现名为 Node 的类的斐波那契指针堆。

typedef boost::heap::fibonacci_heap<Node*> FibonacciHeap;
typedef FibonacciHeap::handle_type HeapHandle;

到目前为止,还不错。但我还想在 Node 类中存储堆元素的句柄。 Boost 特别提到“句柄可以存储在 value_type 中”。 Boost但是,我不能在类内部定义比较运算符,因为堆从不使用它,只比较指针值。

但是定义一个作为模板参数传递给 fibonacci_heap 的比较结构引入了循环依赖:

struct CompareNode : public std::binary_function<Node*, Node*, bool>
{
bool operator()(Node* lhs, Node* rhs) const {
return lhs->getFScore() > rhs->getFScore();
}
};

typedef boost::heap::fibonacci_heap<
Node*,
boost::heap::compare<CompareNode> > FibonacciHeap;

Node 依赖于 HeapHandle,HeapHandle 依赖于 Node。

最佳答案

尝试转发声明节点然后定义非内联运算符

// In Node.h

class Node;
struct CompareNode : public std::binary_function<Node*, Node*, bool>
{
bool operator()(Node* lhs, Node* rhs) const;
};



typedef boost::heap::fibonacci_heap<
Node*,
boost::heap::compare<CompareNode> > FibonacciHeap;

typedef FibonacciHeap::handle_type HeapHandle;

class Node{


HeapHandle handle_;
int getFScore();
};


// In Node.cpp
#include "Node.h"

bool CompareNode::operator()(Node* lhs, Node* rhs) const {
return lhs->getFScore() > rhs->getFScore();
}

关于c++ - 解决模板中的循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13616084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com