[英]How to implement a cQueue as a priority Queue in Omnet++?
我想使用基於Omnet ++的容器cQueue
作為優先級隊列。
正如API參考和手冊中所述-我需要對其進行定義
如下:
cQueue queue("Name of queue", someCompareFunc)
當someCompareFunc
類型為CompareFunc
, CompareFunc
其定義為:
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.