我正在使用omnet ++,并想知道如何在复合模块的c ++文件中获取参数。
module server {
parameters:
int server;
submodule:
//Queue
// processor
}
在c ++中调用par
函数对我有用。
答案 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模块。
请注意,这似乎是微不足道的,首先是不必要的,但随着模型的增长,您开始重新组织组件重用是必须的。