如何在 .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 类型访问。