omnet++ 初学 ned语法部分 simple (一)

简单模块是模型中的活动组件。简单模块是用关键字simple定义的:

simple Queue{
       parameters:
       //参数
       	    int capacity;
       	    @display("i=block/queue");
       gates:
       //端口(门)
       	    input: in;
       	    output: out;
}

参数(parameters)和门(gates)部分都是可选的,也就是说,如果没有参数或门,它们可以被忽略。此外,parameters关键字本身也是可选的;即使有参数或属性,也可以忽略它。
NED定义不包括定义模块操作的任何代码,模块操作使用c++表示。默认情况下,omnet++查找与NED类型(这里是Queue)同名的c++类。
可以使用@class显示的指定c++类。

simple Queue{
       parameters:
       //参数
       	   int capacity;
       	   @class(mylib::queue);
       	   @display("i=block/queue");
       gates:
       //端口(门)
       	   input: in;
       	   output: out;
}

如果有几个模块的c++实现类在同一个名称空间中,那么@class的更好的替代方法是@namespace属性。使用@namespace提供的c++名称空间将被附加到普通类名之前。在下面的例子中,c++类将是mylib::App、mylib::Router和mylib::Queue

@namespace(mylib);
simple App{
	...
}
simple Router{
	...
}
simple Queue{
	...
}

@namespace属性不仅可以像上面示例那样在文件级别指定,还可以用于包。当放置在一个称为包的文件中。该名称空间将应用于该包及其以下的所有组件。
cSimpleModule是所有简单模块类(simple)的基类。
简单模块可以通过子类化来扩展(或专门化)。子类化的动机可以是将一些开放参数或门大小设置为一个固定的值,或者用一个不同的类替换c++类。现在,默认情况下,派生的NED模块类型将从其基类继承c++类,因此,如果希望它使用新类,需要写出@class,记住这一点很重要。
下面的展示了如何通过将参数设置为固定值(并保持c++类不变)来专门化模块:

simple Queue{
	int a;
}
simple Boundered extends Queue{
	a = 10;
} 

编写一个PriorityQueue c++类,并希望拥有一个相应的NED类型,该类型派生自Queue。

simple PriorityQueue extends Queue 
// wrong! still uses the Queue C++ class
{
}

应该如下:

simple PriorityQueue extends Queue 
{
	@class(PriorityQueue);
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值