如何调用复合模块的参数?
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");
这样您就可以在任何复合模块中重用队列模块。
请注意,这首先似乎是微不足道且不必要的,但是随着模型的增长和您开始重新安排事物,组件重用是必须的。
我正在使用 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");
这样您就可以在任何复合模块中重用队列模块。
请注意,这首先似乎是微不足道且不必要的,但是随着模型的增长和您开始重新安排事物,组件重用是必须的。