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

时间:2015-11-03 15:44:13

标签: c++ network-programming omnet++

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

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

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

2 个答案:

答案 0 :(得分:2)

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

一个例子。
NED文件:

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

simple Queue {
 // ...
}

要在Queue类的C ++代码中获取cpuNumber的值,应编写:

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

尝试使用以下代码:

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

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

答案 1 :(得分:1)

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

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

simple Queue {
    int privateCpuNumbers;
}

然后访问您自己的paremeter:

int cpu = par("privateCpuNumber");

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

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