如何在 Omnet++ 中将 cQueue 实现为优先级队列?

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

我想使用基于 Omnet++ 的容器 cQueue 作为优先队列。
正如 API 参考资料和手册中所解释的那样 - 我需要定义它
如下:
cQueue queue("Name of queue", someCompareFunc)

someCompareFunc 是 omnet 定义的 CompareFunc 类型时:
typedef int (*CompareFunc)(cObject *a, cObject *b);

所以,我想实现这个比较功能,但没能写出可以编译的东西。
我承认我有一段时间没有使用函数指针了,但是经过一些小的研究,我想我确实理解并且确实用 eclipse IDE (c++).

写了一些测试代码

我正在尝试在 simpleModule file.cc 处编写代码。
因此,对于我在 "regular way" 中的头文件中声明的每个函数,在 .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-转换]"

在 'ampersand' 之后添加括号也无济于事。

如果我可以使用 Omnet 的这种方法,那将非常有帮助,我想我遗漏了一些东西,因为它是一个定义明确的 "feature" 软件。
我也尝试 google 这些主题,在 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);
    // ...
}