如何在 .ned 文件中声明参数向量
How to declare a vector of parameters in .ned file
我正在尝试在 INET 的 .ned 文件中声明一个向量。
我尝试了下面的方法,但出现语法错误。
double new[] @unit(s) = default({0.01s, 0.02s, 0.05s, 0.08s, 0.003s});
谁能告诉我正确的语法?
我正在使用 OMNET++ 5.5.1 和 INET 4 框架。
谢谢。
您不能在 NED 中声明参数向量。只有模块可以声明为矢量。
但是,您可以使用 string.
实现类似的效果
在 NED 中声明伪装成向量的字符串:
string times = default("0.01s 0.02s 0.05s 0.08s 0.003s");
然后在你的模块的 C++ class 中添加,例如在 initialize()
中代码:
std::vector<std::string> timesStr = cStringTokenizer(par("times")).asVector();
std::vector<simtime_t> timesPar;
for (auto i : timesStr) {
simtime_t t = simtime_t::parse(i.c_str());
timesPar.push_back(t);
}
EV << "Read " << timesPar.size() << " parameters from \"times\"" << std::endl;
// show all read values
for (int j=0; j<timesPar.size(); ++j) {
EV << timesPar[j] << "; ";
}
执行后 timesPar
包含来自 times
的参数数组。
备注:
- 在此示例中,space 是分隔符,但可以在 cStringTokenizer.
中使用任何其他字符作为分隔符
new
是 C++ 中的关键字,因此我建议使用其他名称作为参数和变量。
在 OMNeT++ 5.x 中,没有矢量参数,您只能使用包含 space 分隔值的字符串来解决这个问题。另一方面,OMNeT++ 6 Preview 7 引入了 object
参数类型,可以接受 JSON 语法数组和映射。所以这是有效的:
object array = [ 1s, 1+1, 3.14157m, true, false, "Hello", 'World' ];
并且您可以从 C++ 代码中将此参数作为 cValueArray
类型访问。
我正在尝试在 INET 的 .ned 文件中声明一个向量。
我尝试了下面的方法,但出现语法错误。
double new[] @unit(s) = default({0.01s, 0.02s, 0.05s, 0.08s, 0.003s});
谁能告诉我正确的语法?
我正在使用 OMNET++ 5.5.1 和 INET 4 框架。
谢谢。
您不能在 NED 中声明参数向量。只有模块可以声明为矢量。
但是,您可以使用 string.
实现类似的效果
在 NED 中声明伪装成向量的字符串:
string times = default("0.01s 0.02s 0.05s 0.08s 0.003s");
然后在你的模块的 C++ class 中添加,例如在 initialize()
中代码:
std::vector<std::string> timesStr = cStringTokenizer(par("times")).asVector();
std::vector<simtime_t> timesPar;
for (auto i : timesStr) {
simtime_t t = simtime_t::parse(i.c_str());
timesPar.push_back(t);
}
EV << "Read " << timesPar.size() << " parameters from \"times\"" << std::endl;
// show all read values
for (int j=0; j<timesPar.size(); ++j) {
EV << timesPar[j] << "; ";
}
执行后 timesPar
包含来自 times
的参数数组。
备注:
- 在此示例中,space 是分隔符,但可以在 cStringTokenizer. 中使用任何其他字符作为分隔符
new
是 C++ 中的关键字,因此我建议使用其他名称作为参数和变量。
在 OMNeT++ 5.x 中,没有矢量参数,您只能使用包含 space 分隔值的字符串来解决这个问题。另一方面,OMNeT++ 6 Preview 7 引入了 object
参数类型,可以接受 JSON 语法数组和映射。所以这是有效的:
object array = [ 1s, 1+1, 3.14157m, true, false, "Hello", 'World' ];
并且您可以从 C++ 代码中将此参数作为 cValueArray
类型访问。