我有这样一个类:
class AI
{
private:
struct Comparator
{
bool operator()(const Town* lfs, const Town* rhs)
{
return GetHeuristicCost(lfs) > GetHeuristicCost(rhs);
}
};
int GetHeuristicCost(const Town* town);
// constructor and variables
};
GetHeuristicCost
返回从 town 参数到路径的 exit
的启发式。
我想做的是重载优先级队列的 bool 运算符,但它给了我错误
a nonstatic member reference must be relative to a specific object
我知道为什么会出现此错误,但我不知道如何在 Comparator
结构中使用非静态函数。
GetHeuristicCost
必须是非静态的- 我尝试将
GetHeuristicCost
移动到Town
类中,但没有成功 我需要使用结构重载运算符,因为我需要在
()
上使用两个不同的 bool 重载以用于两种不同的情况但具有相同的参数(两个城镇)。换句话说,我需要结构,所以我不能这样做:bool operator()(const Town* lfs, const Town* rhs) { 返回 GetHeuristicCost(lfs) > GetHeuristicCost(rhs);
基本上我计划有两个这样的结构:
struct Comparator1
{
bool operator()(const Town* lfs, const Town* rhs)
{
return GetHeuristicCost(lfs) > GetHeuristicCost(rhs);
}
};
struct Comparator2
{
bool operator()(const Town* lfs, const Town* rhs)
{
return GetHeuristicCost(lfs) + GetTotalCost (lfs, rhs) > GetHeuristicCost(rhs) + GetTotalCost (lfs, rhs);
}
};
最佳答案
您需要使用指向“外部”类实例的指针/引用来构造 Comparator 嵌套类的实例。
class AI
{
private:
struct Comparator
{
const AI &outer;
Comparator(const AI &o):outer(o){}
bool operator()(const Town* lfs, const Town* rhs)const
{
return outer.GetHeuristicCost(lfs) > outer.GetHeuristicCost(rhs);
}
};
int GetHeuristicCost(const Town* town)const;
};
// how to use in code:
AI::Comparator comp(*this);
priority_queue<Town*, vector<Town*>, AI::Comparator> priorityQueue(comp);
关于c++ - 使用成员函数重载 bool 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20594765/