簡體   English   中英

如何在Omnet ++中實現cQueue作為優先級隊列?

[英]How to implement a cQueue as a priority Queue in Omnet++?

我想使用基於Omnet ++的容器cQueue作為優先級隊列。
正如API參考和手冊中所述-我需要對其進行定義
如下:
cQueue queue("Name of queue", someCompareFunc)

someCompareFunc類型為CompareFuncCompareFunc其定義為:
typedef int (*CompareFunc)(cObject *a, cObject *b);

因此,我想實現此比較功能,但沒有設法編寫可編譯的東西。
我承認我已經有一段時間沒有使用函數指針了,但是經過一番研究,我認為我確實理解並使用eclipse IDE(c ++)編寫了一些測試代碼。

我正在嘗試在simpleModule file.cc上編寫代碼。
因此,對於我以“常規方式”在頭文件中聲明的每個函數,在.cc文件中,我需要在函數名稱之前添加帶有“ ::”的模塊名稱。
所以我在頭文件中聲明:
int compareByNodes (cObject *a, cObject *b);

在.cc文件中:

int JobScheduler::compareByNodes (cObject *a, cObject *b){
       return 1;
    };

我第一次定義cQueue的嘗試是:

cQueue queue("job_Buffer",&compareByNodes);

但是我收到一個編譯錯誤:'compareByNodes'未在此范圍內聲明。
因此,我認為它必須與缺少的“ JobScheduler ::”有關。
第二次嘗試是:

CompareFunc tmp = (CompareFunc)&JobScheduler::compareByNodes;
cQueue queue("job_Buffer",tmp);

這次我的錯誤是:
“這條線上有多個標記
-在這種情況下
-從'int(JobScheduler :: )(omnetpp :: cObject ,omnetpp :: cObject *)'轉換為'omnetpp :: CompareFunc {aka int( )(omnetpp :: cObject,omnetpp :: cObject *)}''[- Wpmf轉換]”

在“&”號后面加上括號也無濟於事。

如果我可以使用Omnet的這種方法,那真的很有幫助,我想我遺漏了一些東西,因為它是該軟件的明確定義的“功能”。
我還嘗試過搜索這些主題,在Google網上論壇部分中進行了搜索,但未找到任何答案。
希望有幫助

嘗試將比較方法聲明為靜態方法。 例如:

//...
class Txc1 : public cSimpleModule {
  protected:
    virtual void initialize() override;
    virtual void handleMessage(cMessage *msg) override;

  public:
    static int MyCompareFunc (cObject *a, cObject *b);
};

Define_Module(Txc1);

int Txc1::MyCompareFunc (cObject *a, cObject *b) {
    return 1;
}

void Txc1::initialize() {
    cQueue q1("queue1", MyCompareFunc);
    // ...
}

暫無
暫無

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

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