omnet++中继承自AdhocHost的新模块
A new module that inherit from AdhocHost in omnet++
我需要一个继承自 AdhocHost
的新模块。之前问的朋友this question, and Mr Jerzy D回答说:
In OMNeT++ behavior is defined only for simple modules. So one cannot
define a C++ classes for a compound module.
但手册指出:
Although the C++ class for a compound module can be overridden with
the @class property, this is a feature that should probably never be
used. Encapsulate the code into a simple module, and add it as a
submodule.
如何创建这个模块?从头开始创建 cSimpleModule
模块是不合逻辑的,因为我想使用预定义的 AdhocHost
参数、方法...以及我的新定义。
你是对的,在OMNeT++
中可以为复合模块定义一个class。你提到的我的回答不是 100% 正确。
要创建一个继承自 AdhocHost
并拥有自己的 class 的新模块,至少应该这样做:
在inet4\src\inet\node\inet
中创建一个新文件AdhocHostExtended.ned
:
package inet.node.inet;
import inet.node.inet.AdhocHost;
module AdhocHostExtended extends AdhocHost {
@class(AdhocHostExtended);
int par1;
double par2;
}
在同一目录下创建AdhocHostExtended.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
在同一目录下创建AdhocHostExtended.cc
:
#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
注意在 initialize()
中使用适当的舞台。阶段在 /inet4/src/inet/common/InitStages.h
中定义
我需要一个继承自 AdhocHost
的新模块。之前问的朋友this question, and Mr Jerzy D回答说:
In OMNeT++ behavior is defined only for simple modules. So one cannot define a C++ classes for a compound module.
但手册指出:
Although the C++ class for a compound module can be overridden with the @class property, this is a feature that should probably never be used. Encapsulate the code into a simple module, and add it as a submodule.
如何创建这个模块?从头开始创建 cSimpleModule
模块是不合逻辑的,因为我想使用预定义的 AdhocHost
参数、方法...以及我的新定义。
你是对的,在OMNeT++
中可以为复合模块定义一个class。你提到的我的回答不是 100% 正确。
要创建一个继承自
AdhocHost
并拥有自己的 class 的新模块,至少应该这样做:
在
inet4\src\inet\node\inet
中创建一个新文件AdhocHostExtended.ned
:package inet.node.inet; import inet.node.inet.AdhocHost; module AdhocHostExtended extends AdhocHost { @class(AdhocHostExtended); int par1; double par2; }
在同一目录下创建
AdhocHostExtended.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
在同一目录下创建
AdhocHostExtended.cc
:#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
注意在 initialize()
中使用适当的舞台。阶段在 /inet4/src/inet/common/InitStages.h