如何调用复合模块的参数?

How do I call a parameter for a compound module?

我正在使用 omnet++,想知道如何在复合模块的 c++ 文件中获取参数。

module server {
   parameters:
      int server;
   submodule:
      //Queue
      // processor
}

在 c++ 中调用 par 函数对我有用。

复合模块没有 C++ 代码。只有简单的模块才有 C++ 代码。要从简单模块的代码中获取复合模块的参数值,可以使用:getParentModule()->par("foo");

举个例子。
NED 文件:

module Server {
    parameters:
        int cpuNumber;
    submodules:
        mod1 : Queue;
}

simple Queue {
 // ...
}

要在 Queue class 的 C++ 代码中获得 cpuNumber 的值,应该这样写:

int cpu = getParentModule()->par("cpuNumber"); // OK

尝试使用以下代码:

int cpu = par("cpuNumber"); // Wrong!

导致错误:unknown parameter 'cpuNumber',因为 Queue 模块没有那个参数。

在您自己的模块之外访问参数是一种反模式。您应该避免这种情况,因为它会阻止 Queue 组件的重用。最好的方法是在复合和子模块中都有参数,并使它们具有相同的值。

module Server {
    parameters:
        int cpuNumber;
    submodules:
        mod1 : Queue {
        privateCpuNumber = cpuNumber;
    };
}

simple Queue {
    int privateCpuNumbers;
}

然后访问您自己的参数:

int cpu = par("privateCpuNumber");

这样您就可以在任何复合模块中重用队列模块。

请注意,这首先似乎是微不足道且不必要的,但是随着模型的增长和您开始重新安排事物,组件重用是必须的。