Omnet++ 从omnet中的AdhocHost继承的新模块&x2B+;
我需要一个从Omnet++ 从omnet中的AdhocHost继承的新模块&x2B+;,omnet++,adhoc,inet,Omnet++,Adhoc,Inet,我需要一个从AdhocHost继承的新模块。朋友们之前问过,先生回答说: 在OMNeT++中,仅为简单模块定义行为。所以我们不能 为复合模块定义C++类。< /P> 但手册指出: 虽然复合模块的C++类可以被重写 @class属性,这是一个可能永远都不应该使用的特性 用过。将代码封装到一个简单的模块中,并将其添加为 子模块 如何创建此模块?从头开始创建cSimpleModule模块是不合逻辑的,因为我想使用预定义的AdhocHost参数、方法,。。。还有我的新定义。你说得对,在OMNeT++中,
AdhocHost
继承的新模块。朋友们之前问过,先生回答说:
在OMNeT++中,仅为简单模块定义行为。所以我们不能
为复合模块定义C++类。< /P>
但手册指出:
虽然复合模块的C++类可以被重写 @class属性,这是一个可能永远都不应该使用的特性 用过。将代码封装到一个简单的模块中,并将其添加为 子模块
如何创建此模块?从头开始创建
cSimpleModule
模块是不合逻辑的,因为我想使用预定义的AdhocHost
参数、方法,。。。还有我的新定义。你说得对,在OMNeT++
中,可以为复合模块定义一个类。你提到的我的回答不是100%正确。要创建从
AdhocHost
继承并具有自己的类的新模块,至少应执行以下操作:
inet4\src\inet\node\inet
中创建一个新文件adhochostended.ned
:
package inet.node.inet;
import inet.node.inet.AdhocHost;
module AdhocHostExtended extends AdhocHost {
@class(AdhocHostExtended);
int par1;
double par2;
}
adhochostended.h
:
#ifndef __INET4_ADHOCHOSTEXTENDED_H_
#define __INET4_ADHOCHOSTEXTENDED_H_
#include <omnetpp.h>
using namespace omnetpp;
namespace inet {
class AdhocHostExtended : public cModule {
protected:
virtual int numInitStages() const override { return NUM_INIT_STAGES; }
virtual void initialize(int stage) override;
virtual void handleMessage(cMessage *msg);
};
} //namespace
#endif
注意在
initialize()
中使用适当的阶段。在中定义了阶段,虽然对于复合模块的C++类可以用@类属性重写,但这是一个应该永远不会使用的特性。将代码封装到一个简单模块中,并将其作为子模块添加。在文件AdhocHostExtended.cc中,永远不会调用函数“void AdhocHostExtended::handleMessage(cMessage*msg)”。其他功能未经测试。
#include "AdhocHostExtended.h"
namespace inet {
Define_Module(AdhocHostExtended);
void AdhocHostExtended::initialize(int stage) {
// an example of reading new parameter in the first stage
if (stage == INITSTAGE_LOCAL) {
EV << "par1 = " << par("par1").intValue() << endl;
}
// your code
}
void AdhocHostExtended::handleMessage(cMessage *msg) {
// your code
}
} //namespace