簡體   English   中英

用成員函數重載布爾運算符

[英]Overloading a bool operator with a member function

我有這樣的課:

    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的啟發式方法。

我想做的是將布爾運算符重載到優先級隊列,但這給了我錯誤

a nonstatic member reference must be relative to a specific object

我知道為什么會給我這個錯誤,但是我不知道如何在Comparator結構中使用非靜態函數。

  1. GetHeuristicCost必須GetHeuristicCost靜態
  2. 我試圖將GetHeuristicCost Town類中無濟於事
  3. 我需要用一個結構重載運算符,因為我需要在()上使用兩個不同的布爾重載,用於兩種不同的情況,但參數相同(兩個鎮)。 換句話說,我需要該結構,所以我不能這樣做:

    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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM